2016-07-08 13 views
0

I folgende Struktur haben:C# Liste von substituierbar Typ

awesomeItemBase 
+ int a 
+ int b 

awesomeItemSpecial1: awesomeItemBase 
+ int c 
+ string s 
..etc 

awesomeItemSpecial2: awesomeItemBase 
+ int d 
+ string t 
..etc 

Nehmen wir an, ich durch Umwickeln sie in einer gemeinsamen Art eine Liste der 2 abgeleiteten Klassen erstellen möchten, so dass jedes Listenelement die Informationen hält int a, int b eine Schnittstelle kann keine Felder haben ..

Wie könnte ich das tun?

+0

warum nicht mit Eigenschaften? Schnittstelle kann sie verwenden – Vladimir

+1

"Wie könnte ich das tun?" - Du hast es schon getan, oder? 'List ' befüllt mit 'awesomeItemSpecial1' und' awesomeItemSpecial2' Elementen (casted zu 'awesomeItemBase') ermöglicht es Ihnen, diese Liste zu iterieren und auf die' a' und 'b' Eigenschaften jedes Elements zuzugreifen. – Quantic

Antwort

2

Wenn ich Ihre Frage richtig zu verstehen, könnten Sie dies tun:

public class AwesomeItemBase { 
    // you could also make these fields 
    public int A {get; set;} 
    public int B {get; set;} 
} 

public class AwesomeItemSpecial1 : AwesomeItemBase { 
    // additional fields and properties 
} 

public class AwesomeItemSpecial2 : AwesomeItemBase { 
    // additional fields and properties 
} 

Sie würden dann in der Lage:

var foo = new AwesomeItemSpecial1(); 
foo.A = 42; 
foo.B = -1; 
var bar = new AwesomeItemSpecial2(); 
bar.A = 3; 
bar.B = 59; 

var awesomeList = new List<AwesomeItemBase>(); 
awesomeList.Add(foo); 
awesomeList.Add(bar); 

foreach (var item in awesomeList) { 
    Console.WriteLine("A = {0}, B = {1}", item.A, item.B); 
} 

// output is: 
// A = 42, B = -1 
// A = 3, B = 59 
+0

AwesomeItemBase kann sogar eine Schnittstelle sein, die keine Klasse benötigt. Abgesehen davon - stimme ich zu. – Vladimir

+2

@Vladimir Wenn 'AwesomeItemBase' eine Schnittstelle ist, müssten die zwei" Special "Klassen die' A' und 'B' Eigenschaften einzeln implementieren. Ob "AwesomeItemBase" eine Schnittstelle, eine abstrakte Klasse oder eine Klasse ist, hängt vom Anwendungsfall ab. –

Verwandte Themen