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.


Anmelden zum Antworten