Problem mit Generics
-
Hallo zusammen,
folgende Deklaration eines Interface habe ich:
public interface MyInterface<T> where T : IMyClass { void SubscribeEvents(T myClass); //... other methods }
Den Parameter T habe ich gewählt, weil ich je nach konkreter IMyClass andere Events abonnieren möchte.
Nun macht mir aber folgende Klasse Schwierigkeiten:
public class Main { private MyInterface</*...*/> foo; // Fehler -> ich weiß aber nicht, was T ist private IMyClass concreteMyClass;
Main soll irgendein Child von MyInterface halten. Nur was soll ich ihn die <> Klammern schreiben? T ist der Typ von "concreteMyClass".
Kann man dieses Problem irgendwie beheben?
-
Nur mal zum Verständnis. Du willst also sowas:
class MyClass1: IMyClass { /* Code */ } class MyClass2: IMyClass { /* Code */ } public class Main { //Option1: private MyInterface<MyClass1> foo; private IMyClass concreteMyClass; // ist MyClass1 //Option2: private MyInterface<MyClass2> foo; private IMyClass concreteMyClass; // ist MyClass2 }
Warum machst du Main nicht auch generisch ?
public class Main<T> where T : IMyClass { private MyInterface<T> foo; private T concreteMyClass; }
Weil irgendwann musst du ja festlegen welchen Typ foo hat. Das geht aber ja nicht zur Runtime und abhängig vom Typ von concreteMyClass, sondern muss zur Compilezeit feststehen.
-
Habe gerade kein Compiler zur Hand, aber meine Idee waere dass du nicht das Interface generisch machst, sondern die Methode die in dem Interface deklariert wird.