2009-08-21 2 views
0

Хорошо, у меня есть интерфейс, позволяет называть его.net отражение нахождения объекта от интерфейса MemberInfo объекта

public interface bar { 
    string Foo; 
} 

также есть класс, который реализует интерфейс

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

Я тогда недвижимость висящий на другом объекте, который содержит список интерфейсов «бар», которые содержат различные реализации, например,

public list<bar> listOfBars; 

Теперь, когда я использую выражение дерева/функции, как так

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

я могу получить MemberInfo прочь дерева выражений. Memberinfo хотя указывает на метод интерфейса, а его класс - интерфейс. Это почти работает, но мне нужно знать, что такое его родительский класс, поэтому мне нужно было бы от объекта memberinfo, чтобы найти и увидеть, как его вызов метода отключен от «барного» интерфейса, а тип класса - «fooBar». Есть ли способ сделать это, я прорыл объект memberinfo в окне просмотра и не могу перейти к родительскому типу. Возможно, я что-то пропустил.

ответ

0

Я думаю, что вы получаете некоторые понятия смущены. Когда вы реализуете интерфейс, вы фактически не выводите свой класс из интерфейса. Вы на самом деле делаете это:

public class fooBar : object, Foo { } 

Класс будет получен из объекта, а также реализован интерфейс Foo. Классы могут выводиться только из одного типа объекта, но могут реализовывать несколько интерфейсов.

Другая проблема, с которой вы столкнетесь, заключается в том, что интерфейсы не могут содержать поля. Вы должны изменить это:

public interface bar {string Foo;} 

к этому

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

Теперь, если вы измените все эти элементы, вы можете захотеть взглянуть на это ключевое слово. Вы можете проверить, если класс реализует интерфейс, выполнив следующие действия:

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

К сожалению, большая часть кода в VB, и когда я печатал на C# я майского не имел синтаксис весь путь правильный , Интерфейс настроен так, как вы сказали публичный бар интерфейса {строка Foo {get; set;}} Также ключевое слово IS не будет работать, так как я не хочу иметь оператор case всех моих классов. Когда я захватываю элемент из отражения так propertyMethod = TryCast (выражение.Body, System.Linq.Expressions.MemberExpression) Он только рассказывает мне об интерфейсе и свойстве интерфейса, на которое указывает дерево. Я не могу попасть в имя класса реального объекта или ничего. – Josh

 Смежные вопросы

  • Нет связанных вопросов^_^