Generika -- und ich dachte schon, das verstanden zu haben... *seufz* HELP!

30/03/2009 - 20:21 von Carsten Posingies | Report spam
Hallo!

Angenommen, ich habe eine Schnittstelle

interface IMyGenericInterface<T>
{
string ToString();
}

, und ich implementiere sie in Klassen:

class MyFirstClass : IMyGenericInterface<string> { /* ... */ }
class MySecondClass : IMyGenericInterface<int> { /* ... */ }

Nun möchte ich Instanzen dieser beiden Klassen in EINE Liste, also
list<IMyGenericInterface<T>>, schieben können, um dann per

foreach (IMyGenericInterface<T> item in items)
{
SomeMethod(item.ToString());
}

irgendwas damit anzustellen. Simpel gesagt... Wie erklàre ich meinem
Compiler

IMyGenericInterface<T> instance; // <== "The type or namespace name
// 'T'..."
if (someCheck)
instance = new MyFirstClass();
else
instance = new MySecondClass();

???

Mir schwant da ja schon was, das eklige, alte "Methodensignaturen dürfen
sich nicht bloß in ihren Rückgabetypen unterscheiden"... Aber praktisch
trifft das hier ja eigentlich nicht zu, denn
myFirstClassInstance.ToString() ist definitiv auch für die Laufzeit von
mySecondClassInstance.ToString() unterscheidbar. Von daher gibt es hier
keine 1:n-Ambivalenz. Und wenn ich nun instance.ToString() aufrufe, gibt
es auch keinen Konflikt, da der Rückgabetyp in der Schnittstelle klar
auf string festgelegt ist. Erst bei einem Methoden-Stub T ToWhatever()
in der Schnittstellendefinition würde ich einen Compilerfehler erwarten.

Carsten
 

Lesen sie die antworten

#1 Armin Zingler
30/03/2009 - 21:26 | Warnen spam
"Carsten Posingies" schrieb
Angenommen, ich habe eine Schnittstelle

interface IMyGenericInterface<T>
{
string ToString();
}


IMyGenericInterface<T> instance; // <== "The type or namespace name
// 'T'..."



Du musst für T schon einen konkreten Typ einsetzen.


Armin

Ähnliche fragen