Ich bin neu in C# und ziemlich neu in der Programmierung. Ich brauche Hilfe bei einem Thema, das ich in der vergangenen Woche herausgefunden habe. Ich habe 3 Dateien:Datenstruktur von Objekten und Methoden in C#
- Steuerung: dies ist eine Schnittstelle und sollte die Liste meiner Methoden
ControlImpl enthalten: das ist die implementaion der Schnittstellen.
Laufzeit: enthält, welche die Bindungs Code zwischen Hauptverfahren und der Schnittstelle implementaion
Test_main: von wo Ich nenne die Laufzeitmethode 'rufen'
Problem: Es kann eine beliebige Anzahl von Instanzen (für zB: c, c1, c2 usw.) in der Steuerdatei geben und jede Instanz kann die Methoden SetTime() und Nop() aufrufen.
Ich machte eine Liste der Methoden SetTime()
und Nop()
. Aber wie kann ich die Instanz zu einer Liste hinzufügen, so dass jede Instanz beim Aufruf ihre Methoden aufrufen soll?
KONTROLL
namespace create_interface
{
interface Control
{
void SetTime(params object[] paramsArr);
void Nop(params object[] paramsArr);
}
public class CM
{
Control c = new ControlImpl();
public List<object> ControlMain()
{
List<object> methods = new List<object>();
methods.Add(new Action<object[]>(c.SetTime));
methods.Add(new Action<object[]>(c.Nop));
return methods;
}
}
}
ControlImpl:
namespace create_interface
{
public class ControlImpl : Control
{
void Control.SetTime(params object[] paramsArr)
{
Console.WriteLine("inside Control.SetTime {0} ", paramsArr[0]);
}
void Control.Nop(params object[] paramsArr)
{
Console.WriteLine("inside Control.Nop ");
}
}
}
Laufzeit:
namespace create_interface
{
public class runtime
{
public void call(params object[] methodparams)
{
if ((methodparams[0].Equals(0)) || (methodparams[0].Equals(1)))
{
//List<Control> objectlists = cmObject.ControlObjectList();
List<object> methods = cmObject.ControlMain();
//Console.WriteLine(methods.Count);
Action<object[]> method = (Action<object[]>)methods[(int)methodparams[0]]; //object[]
object[] args = new object[] { methodparams[1] };
method(args);
}
else
Console.WriteLine("wrong ID number entered");
}
Test_main:
namespace create_interface
{
class test_main
{
static void Main(string[] args)
{
long time;
CallingFunc CF = new CallingFunc();
Console.WriteLine("enter method ID");
int methodID = Convert.ToInt32(Console.ReadLine());
try
{
switch (methodID)
{
case 0:
Console.WriteLine("enter the time in long");
time = Convert.ToInt64(Console.ReadLine());
CF.call(methodID, time);
break;
case 1:
CF.call(methodID, null);
break;
default:
Console.WriteLine("you entered wrong method ID or parameters");
break;
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
Meinten Sie eine Liste mit allen Instanzen mit einer bestimmten Methode auf alle auszuführen sie zur gleichen Zeit? Sehen Sie sich in diesem Fall das Objekt List im System.Collection.Generics-Namespace an. –
@NahuelIanni die Test_main sollte Runtime.call (ID) enthalten; Es wird also eine ID an runtime-> call method übergeben, die mit der jeweiligen Instanz (dh; c, c1, c2, etc.) und mit der entsprechenden Methode (zB; SetTime oder Nop) verlinkt werden soll. –
@NahuelIanni Also dachte ich, es sollte so etwas wie einen Baum brauchen. Ein Baum, der aus Instanzen und diesen Instanzen besteht, sollte mit der Methode verknüpft sein. Aber ich bin mir nicht sicher, ob dies die richtige Vorgehensweise ist. –