Ich habe eine abstrakte Klasse namens A und andere Klassen (B, C, D, E, ...), die implementiert. Meine abgeleiteten Klassen halten Werte verschiedener Typen. Ich habe auch eine Liste von A-Objekten.Aufruf abgeleiteter Methoden auf einer Basisklassensammlung
abstract class A { }
class B : class A
{
public int val {get;private set;}
}
class C : class A
{
public double val {get;private set;}
}
class D : class A
{
public string val {get;private set;}
}
class Program
{
static void Main(string[] args)
{
List list = new List { new B(), new C(), new D(), new E() };
// ...
foreach (A item in list)
{
Console.WriteLine(String.Format("Value is: {0}", item.val);
}
}
}
... wobei die .val nicht von der Basisklasse ofc bekannt ist.
Wie kann ich dieses dynamische Verhalten erhalten? Ich möchte getType nicht in langen switch/if-Anweisungen verwenden.
Die Tatsache, dass die Klassen erben von 'A' spielt hier keine Rolle -' A' keinen 'val', so die Unterklassen' val 's sind nicht verwandt. Sie können auch einfach 'object' als Basisklasse verwenden. Ich denke, das klingt so, als ob Sie 'dynamic' verwenden möchten, wenn Sie C# 4.0+ – Blorgbeard
@Blorgbeard One kleine Korrektur verwenden. C# 4.0 sowie .net 4.0 –