Announcement

Collapse
No announcement yet.

Eine Klasse dynamisch instanziieren

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

  • Eine Klasse dynamisch instanziieren

    Hallo zusammen,

    ich stehe gerade wieder voll auf dem Schlauch und bei Google bin ich mit meinen Suchbegriffen nicht weiter gekommen.
    In meinem Programm möchte ich eine Klasse instanziieren in Abhängigkeit der Datei die der User öffnet.

    string className = "Describe" + ext;
    string methodName = "GiveDescription";


    Wie ich das mit einer Statischen Klasse machen kann weiß ich, aber die Klasse bekommt ein Interface und kann deswegen nicht statisch sein.

    Wie bekomme ich jetzt eine Instanz der Klasse in className?

    Gruß Womble

  • #2
    Hallo zusammen,

    jetzt habe ich gedacht ich hätte was und hänge wieder und weiß nicht wie ich weiter komme.
    Im Moment habe ich:

    var handle = Activator.CreateInstance(Type.GetType(className));
    MethodInfo m = Type.GetType(className).GetMethod(methodName);
    Result = (MakeResult)m.Invoke(handle, new Object[] { filename, desctype, displayOptions });


    Aber beim Result = bekomme ich die Fehlermeldung: Das Objekt des Typs MakeResult kann nicht in Typ MakeResult umgewandelt werden.

    Was habe ich denn jetzt verkehrt gemacht?

    Gruß Womble

    Comment


    • #3
      Wenn deine Klasse ein bestimmtes Interface implementiert dann caste den return von CreateInstance auf dieses Interface. Dann sollte das ganze dynamische Methodenaufrufen überflüssig sein.

      Und wenn es noch kein Interface gibt für deine Methode die du da aufrufen willst solltest du überlegen das in ein Interface zu packen. Da du eh die Oberfläche genau kennen mußt um die Methode so per Invoke aufrufen zu können spricht da auch eigentlich nichts dagegen.

      Comment


      • #4
        Danke Ralf.

        Kaum macht man es richtig, schon gehts

        IDescribe handle = (IDescribe)Activator.CreateInstance(Type.GetType(c lassName));
        Result = handle.GiveDescription(filename, desctype, displayOptions);


        Gruß Womble

        Comment

        Working...
        X