Announcement

Collapse
No announcement yet.

Nochmal Fragen zu Generics casten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Nochmal Fragen zu Generics casten

    Hallo zusammen,

    ich stolpere abermals für Generics - wohl ahnend, dass der urspr. Sinn von Generics nicht ganz getroffen wurde.

    Wie kann ich verschiedene Generic-Typen auf eine gemeinsame Basis casten

    MyClass<double>
    MyClass<int>
    MyClass<string>
    etc.

    ich hätte gerne etwas in der Art:

    Type t1 = typeof(MyClass<>);
    Type t2 = myItem.GetType();

    if ( true == t2.Name.Equals(t1.Name) )
    {
    MyClass<> obj = (MyClass<>);
    bzw.
    object obj = (MyClass<>)myItem.GetIrgendeinObject();
    }

    Wer kann helfen?

    Viele Grüße
    HP

  • #2
    Hallo,

    Generics sind universell nutzbare Klassen und Methoden, die einen Datentyp-Parameter verwenden. Dies erlaubt zum einen den bereits zur Kompilierungszeit wirksamen typsicheren Zugriff und verbessert in der Regel auch die Ausführungsleistung, da das ressourcenintensive Boxing und Unboxing entfällt. Der folgende Vergleich verdeutlicht die Laufzeitvorteile:

    a) Array von object-Instanzen speichert int-Werte: 67 Millisekunden Zeitdauer

    b) Array von int-Instanzen speichert int-Werte: 22 Millisekunden Zeitdauer

    c) Generisches Array speichert int-Werte: 23 Millisekunden Zeitdauer

    Obwohl c) mit verschiedenen Datentypen umgehen kann, erreicht es fast die Ausführungsgeschwindigkeit eines optimierten int-Arrays, wenn der int-Typ angefordert wird.

    Wie kann ich verschiedene Generic-Typen auf eine gemeinsame Basis casten
    Generics haben nichts mit Vererbung zu tun, statt dessen "zaubert" nur der Kompiler im Hintergrund. Wenn die Typumwandlung verschiedener Klassen benötigt wird, ist auch im Zeitalter von .NET 2.0/3.0 ein gemeinsames Interface der richtige Ansatz.

    Comment


    • #3
      Hallo Andreas,

      Du hast natürlich recht - nur, ich habe kein geeignetes Interface...d.h. der einzige
      Weg eine Methode aufzurufen führt Reflections !?

      Viele Grüße HP

      Comment


      • #4
        Hallo Hans-Peter,

        Wie kann ich verschiedene Generic-Typen auf eine gemeinsame Basis casten
        Nun Du könntest eine Klassenhierarchie aufbauen und dann für den generischen Typ Constraints definieren.

        Beispiel:
        class MyList<T> : List<T> where T : BaseClass{}

        Damit ist sichergestellt, dass man nur Klassen von MyList definieren kann, deren generischer Typ von BaseClass abgeleitet ist.

        Hoffe das hilft
        Peter

        Comment

        Working...
        X