2009-08-21 7 views
0

D'accord, j'ai une interface, permet de l'appelerréflexion .net objet recherche de l'interface MemberInfo objet

public interface bar { 
    string Foo; 
} 

ont également une classe qui implémente l'interface

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

J'ai alors une propriété accrocher un autre objet qui contient une liste de l'interface "bar" qui contiennent différentes implémentations, comme,

public list<bar> listOfBars; 

Maintenant, quand j'utilise un arbre d'expression/fonction comme si

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

je peux obtenir le MemberInfo hors de l'arbre d'expression. Le memberinfo pointe cependant vers la méthode d'interface et sa classe est l'interface. Cela fonctionne presque, mais j'ai besoin de savoir ce que sa classe parente est, donc j'aurais besoin de l'objet memberinfo pour trouver et voir son appel d'une méthode hors de l'interface "bar", et le type de classe est "fooBar". Y at-il un moyen de faire cela, j'ai creusé à travers l'objet memberinfo dans la fenêtre de surveillance et ne peux pas accéder au type parent. Je pourrais manquer quelque chose cependant.

Répondre

0

Je pense que vous obtenez des concepts confus. Lorsque vous implémentez une interface, vous ne dérivez pas réellement votre classe de l'interface. Vous êtes en train de faire ceci:

public class fooBar : object, Foo { } 

Votre classe dérivera d'un objet et implémentera aussi l'interface Foo. Les classes peuvent uniquement dériver d'un type d'objet, mais peuvent implémenter plusieurs interfaces.

Un autre problème que vous aurez est que les interfaces ne peuvent pas contenir de champs. Vous devez changer ceci:

public interface bar {string Foo;} 

à cette

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

Maintenant, en supposant que changer tous ces éléments, vous pouvez regarder dans le mot-clé IS. Vous pouvez vérifier si une classe implémente une interface en procédant comme suit:

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

Désolé, la plupart du code est en VB, et quand je tapais le C# Je mai n'avait pas la syntaxe tout le chemin à droite . L'interface est configurée comme vous l'avez dit public interface bar {string Foo {get; set;}} Le mot clé IS ne fonctionnera pas non plus car je ne veux pas d'instruction case de toutes mes classes. Lorsque j'attrape le membre de la réflexion comme si propertyMethod = TryCast (expression.Body, System.Linq.Expressions.MemberExpression) Il me parle uniquement de l'interface et de la propriété d'interface vers laquelle l'arbre pointe. Je ne peux pas obtenir le nom de la vraie classe des objets ou rien. – Josh

Questions connexes