Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как получить интерфейс по его имени


Автор: Brausman 15.3.2011, 10:36
Здравствуйте, до сей поры программировал только в Delphi, ну и давно реализовывал сложную математику на С++. На работе пришлось столкнуться со SCADA-системой в которой реализация идет через C#.
Только начал его изучение, но на работе, как вы понимаете, результат нужен сейчас.
Вот в чем вопрос, имеется имя интерфейса в SCADA(например IPresentation.Name), как зная только это имя получить его интерфейс(топорно выражаясь получить доступ к методам и свойствам интерфейса IPresentation), средствами языка C#.

Автор: Brausman 15.3.2011, 11:09
По теме у меня нет переменной объекта, чтобы привести его,например так :
((IPresentation)SCADAObj).Name;
имеется только имя объекта(интерфейса), и я не знаю, как через имя(интерфейса,объекта), получить объект(интерфейс).
В этом вся и трабла(.

Автор: mihryak 15.3.2011, 12:10
Цитата(Brausman @  15.3.2011,  12:09 Найти цитируемый пост)
имеется только имя объекта(интерфейса), и я не знаю, как через имя(интерфейса,объекта), получить объект(интерфейс).

ничего не понятно

Автор: Brausman 15.3.2011, 12:22
Поясняю ниже из кода имеется только имя(выделенное) : 
((IPresentation)SCADAObj).Name;
Как мне получить только зная имя SCADAObj.Name или ((IPresentation)SCADAObj).Name, получить переменную содержащую класс - SCADAObj или интерфейс - IPresentation.

Автор: mihryak 15.3.2011, 12:44
всё равно не понимаю
у тебя есть откуда-то взявшаяся строка "Name", так? и ты хочешь получить переменную с типом Type из неё, зная при этом, что это будет SCADAObj или IPresentation?
почему бы тогда не вызвать сразу typeof(IPresentation)?

если же ты под 
Цитата(Brausman @  15.3.2011,  13:22 Найти цитируемый пост)
переменную содержащую класс

подразумеваешь не Type, а экземпляр этого типа, то никак разумеется, ведь этих инстансов ещё может не быть создано ни одного, или их тысячи

Автор: Fitc 15.3.2011, 21:52
Цитата(Brausman @ 15.3.2011,  12:22)
Поясняю ниже из кода имеется только имя(выделенное) : 
((IPresentation)SCADAObj).Name;
Как мне получить только зная имя SCADAObj.Name или ((IPresentation)SCADAObj).Name, получить переменную содержащую класс - SCADAObj или интерфейс - IPresentation.

Тебе нужен экземпляр класса в котором инициализирован SCADAObj.
Если SCADAObj - поле класса, то делай так:
Код

FieldIfo fi=SCADAObjParent.GetType().GetField(nameOfSCADAObj);
IPresentation valueOfSCADAObj=fi.GetValue(SCADAObjParent,null) as IPresentation;

Если SCADAObj  - свойство класса, то делай так:
Код

PropertyInfo pi=SCADAObjParent.GetType().GetProperty(nameOfSCADAObj);
IPresentation valueOfSCADAObj=fi.GetValue(SCADAObjParent,null) as IPresentation;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)