2017-10-27 3 views
-1

Ich arbeite derzeit auf Reflexion mit C# und ich habe eine Frage. Ich versuche, verschiedene Klassen aufzurufen, die abstrakt oder interaktiv sein können. Also rufe ich einfach nicht die Methoden von denen auf, weil ich (offensichtlich) keine Instanz erstellen kann. Aber damit bin ich nicht zufrieden.Invoke Methoden der abstrakten Typen


Meine Frage ist: ist es möglich, irgendwie, dies zu umgehen und eine Instanz von etwas zu schaffen, wo ich die Methoden der gegebenen abstrakten Klasse Typ aufrufen kann? Sorta wie eine Klasse zu erstellen, die von einer Vorlage erbt, die dann der abstrakte Typ sein kann?

foreach (MethodInfo m in _classType.GetMethods(bindingFlags)) 
    { 
       if (_classType.IsAbstract || _classType.IsInterface) 
       { 
        // only invoke instanciable types 
        MessageBox.Show("Abstract class and Interface cannot be invoked!"); 
       } 
       else 
       { 
        var ms = CreateStringFromMethodForCheckedBox(m); 
        if (s == ms) 
        { 
         m.Invoke(Activator.CreateInstance(_classType), null); 
        } 
       } 
    } 
+2

Und was erwarten Sie von einer abstrakten Methode, wo sie ohne Definition nicht weiß, was zu tun ist? – praty

+0

Sie erwähnen auch Schnittstellen, was würden Sie erwarten, wenn Sie versuchen würden, eine "Methode" auf einer Schnittstelle aufzurufen? Diese Frage ergibt ohne weitere Informationen keinen Sinn. – DavidG

Antwort

1

Ja, Sie können dynamisch eine neue Klasse zur Laufzeit erstellen, die von der abstrakten Typ erbt und dann die Methoden auf die Klasse aufrufen: http://www.c-sharpcorner.com/UploadFile/87b416/dynamically-create-a-class-at-runtime/

Sie haben, um sicherzustellen, Sie sonst alle abstrakten Methoden außer Kraft setzen Ihre Klasse muss abstrakt sein und Sie werden nichts gewonnen haben.

+0

Nicht sicher, warum dies abgelehnt wurde, während die ursprüngliche Frage versucht, etwas zu tun, was wohl nicht getan werden sollte, ist dies die sinnvollste Problemumgehung. –

+0

@ TitianCernicova-Dragomir Ja, ich verstehe auch nicht den Downvote. – john

+0

Was ist mit Schnittstellen wie in der Frage erwähnt? – DavidG

Verwandte Themen