2009-08-21 2 views
0

Ok Objekt MEMBER, ich eine Schnittstelle haben, nennen wir es.net Reflexion der Suche Objekt von der Schnittstelle

public interface bar { 
    string Foo; 
} 

auch eine Klasse, die die Schnittstelle

public fooBar : bar { 
    public string Foo {get; set;} 
} 

implementiert Ich habe dann eine Eigenschaft hängt von einem anderen Objekt, das eine Liste von Schnittstellen "bar" enthält, die verschiedene Implementierungen enthalten, so

public list<bar> listOfBars; 

Nun, wenn ich einen Ausdruck Baum/Funktion wie so

function(parentObj x) { x.listOfBars(0).Foo;} 

kann ich die Member off des Ausdrucksbaums erhalten. Die Memberinfo verweist jedoch auf die Interface-Methode und ihre Klasse ist die Schnittstelle. Das funktioniert fast, aber ich muss wissen, was seine Elternklasse ist, also müsste ich vom mattressinfo-Objekt finden und sehen, dass es eine Methode von der "bar" -Schnittstelle aufruft, und der Klassentyp ist "fooBar". Gibt es eine Möglichkeit, dies zu tun, ich habe durch das Mitgliedinfo-Objekt im Überwachungsfenster gegraben und kann nicht zum übergeordneten Typ. Ich könnte jedoch etwas vermissen.

Antwort

0

Ich denke, dass Sie einige Konzepte verwirrt bekommen. Wenn Sie eine Schnittstelle implementieren, leiten Sie Ihre Klasse nicht von der Schnittstelle ab. Sie tun dies tatsächlich:

public class fooBar : object, Foo { } 

Ihre Klasse wird von einem Objekt abgeleitet und auch die Schnittstelle Foo implementieren. Klassen können nur von einem Objekttyp abgeleitet werden, können jedoch mehrere Schnittstellen implementieren.

Ein anderes Problem, das Sie haben werden, ist, dass Schnittstellen keine Felder enthalten können. Sie müssen dies ändern: Jetzt

public interface bar {string Foo;} 

dieser

public interface bar {string Foo {get;set;} } 

, vorausgesetzt, Sie alle diese Elemente ändern, könnten Sie in das IS Stichwort suchen. Sie können überprüfen, ob eine Klasse eine Schnittstelle implementiert, indem Sie folgendermaßen vorgehen:

object o = new object(); 
if(o is bar) { 
    //do interface bar stuff here 
} 
+0

Sorry, die meisten der Code ist in VB, und wenn ich die C# getippt ich von möglicherweise nicht die Syntax ganz Recht hatte, . Die Schnittstelle ist Setup wie Sie sagten öffentliche Schnittstelle bar {string Foo {get; set;}} Auch das IS-Schlüsselwort wird nicht funktionieren, da ich keine Case-Anweisung aller meiner Klassen haben möchte. Wenn ich das Mitglied aus der Reflexion wie so greifen propertyMethod = TryCast (Ausdruck.Body, System.Linq.Expressions.MemberExpression) Es erzählt mir nur über die Schnittstelle und die Schnittstelle Eigenschaft der Baum zeigt auf. Ich kann den Klassennamen der Objekte oder nichts erreichen. – Josh

Verwandte Themen