.net отражение поиска объекта из интерфейса. - PullRequest
0 голосов
/ 21 августа 2009

Хорошо, у меня есть интерфейс, давайте называть его

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 найти и увидеть, как он вызывает метод из интерфейса "bar", а тип класса - "fooBar". Есть ли способ сделать это, я перерыл объект memberinfo в окне просмотра и не могу добраться до родительского типа. Я мог бы что-то упустить, хотя.

1 Ответ

0 голосов
/ 21 августа 2009

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

public class fooBar : object, Foo { }

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

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

public interface bar {string Foo;}

к этому

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

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

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