generisches abstraktes/interface-Property

02/10/2008 - 15:41 von Christian Pätzold | Report spam
Hallo,

mein Problem ist folgendes; ich habe eine generisch definierte Klasse:

public class MyObjectList<T> : Collection<T> where T : IMyObject

IMyObject definiert dabei die Funktionalitàt des expliziten Objektes (z.B.
MyObject), welches eine MyObjectList<MyObject> enthàlt (also eine Liste von
weiteren Objekten des eigenen Typs). Natürlich sollen entsprechend auch
andere Objekte möglich sein, die das IMyObject-Interface implementieren.
Ich möchte nun in meinem Interface definieren das Objekte (wie z.B.
MyObject) eine Liste von sich selber (als expliziten Typen) implementieren
müssen. Quasi in etwa so:

interface IMyObject
{
MyObjectList<T> ObjectList { get; set; }
}
(Code funktioniert nicht)

Nach làngerem studium der MSDN C#-Dokumentationen, weiteren Foren etc.
scheint dies in C# nicht möglich zu sein. Gibt es hierfür vielleicht bereits
ein Pattern um das Problem zu lösen oder ggf zu umgehen (ohne explizites
Typecasting à la List<object>)?
 

Lesen sie die antworten

#1 Frank Dzaebel
02/10/2008 - 17:40 | Warnen spam
Hallo Christian,

Ich möchte nun in meinem Interface definieren das Objekte (wie z.B.
MyObject) eine Liste von sich selber (als expliziten
Typen) implementieren müssen. [...]
Nach làngerem studium der MSDN C#-Dokumentationen, weiteren
Foren etc. scheint dies in C# nicht möglich zu sein.



Zur Klàrung ...
Es wàre ja zum Beispiel soetwas möglich:

public partial class Form1 : Form
{
public Form1(){InitializeComponent();}

private void Form1_Load(object sender, EventArgs e)
{
MyObjectList<MyClass> mol = new MyObjectList<MyClass>();
MyClass mc1 = new MyClass(); MyClass mc1Sub1 = new MyClass();
mc1.Liste.Add(mc1Sub1); mol.Add(mc1);
}
}

class MyClass : IMyObject
{
List<IMyObject> liste = new List<IMyObject>(42);

public List<IMyObject> Liste
{
get { return liste; }
set { liste = value; }
}
}

class MyObjectList<T> : Collection<T> where T : IMyObject
{
}

interface IMyObject
{
List<IMyObject> Liste { get; set; }
}

________________

Aber Du möchtest in MyClass sicher unbedingt
wieder MyClass benutzen, ohne einen Cast
durchzuführen?


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen