Почему Assembly.GetType () отражает сборку отражений, когда загружается другая сборка? - PullRequest
0 голосов
/ 16 мая 2011

Я новичок в использовании Reflection, но пытаюсь понять поведение GetType ()

У меня есть следующее:

assembly = Assembly.LoadFile(@"D:\ObjectRelations.dll");             
Type type = assembly.GetType("ObjectRelations.JSHierarchyBuilder");               
MethodInfo[] methods = type.GetMethods();

try                  
{       
 foreach (MethodInfo method in methods)
 {
     .... List Some info, etc.
 }
}
catch ...

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

     Type type = assembly.GetType();

Дает мне методы, связанные с Reflection Assembly, а не с Assembly, которая обозначена в методе LoadFile, что на самом деле не то, что я ожидал или считал бы практическим поведением; иначе зачем мне вообще нужен какой-либо файл для загрузки, если тип возвращаемого значения будет типом Reflection Assembly. Как-то странно для меня.

Во всяком случае, если это правильно; и увидев, что мой первый пример сработал так, как задумано. Тогда как можно получить какую-либо информацию, например «Методы» сборки, без точного знания пространства имен и / или имени класса сборки, которое может отличаться от имени сборки?

Я предполагаю, что Reflection должен позволить вам изучить этот тип информации, даже если у вас нет предвидения того, что находится под капотом сборки, и что динамический аспект создания объектов во время выполнения не является "единственным" преимуществом.

Может ли кто-нибудь излагать плз? Или я все об этом говорю не так.

Ответы [ 2 ]

3 голосов
/ 16 мая 2011

При звонке:

 Type type = assembly.GetType();

Вы фактически вызываете метод Object.GetType() в Assembly, который возвращает typeof(Assembly).

Я подозреваю, что вы хотели:

 Type[] types = assembly.GetTypes();

Это вернет коллекцию всех типов, определенных в сборке.

Разница здесь в том, что в первом случае вы запрашиваете переменную (assembly) для ее типа, который равен Assembly. Во втором случае вы запрашиваете экземпляр списка типов, определенных в самой сборке.

1 голос
/ 16 мая 2011

Вы вызываете стандартный метод Object.GetType(), который дает тип времени выполнения экземпляра, для которого он вызывается.

Возможно, вы ищете Assembly.GetTypes() (множественное число)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...