Метапрограммирование в .NET
Кевин Хазард
Изменения с рефлексией
Есть несколько изменений, которые существуют в Windows 8 и .NET 4.5 по отношению к Reflection API. Первое из них заключается в том, как класс Type
проецируется в Windows 8. Есть новый класс, называемый TypeInfo
, и вы будете использовать его часто в Windows 8, если вы будете работать с рефлексией, потому что это единственный способ получить доступ и вызвать элементы во время выполнения. Вы не видите методов, как IsAssignableFrom
, для объекта Type
:
typeof(object).IsAssignableFrom(typeof(Math))
Вам нужно делать это таким образом:
typeof(object).GetTypeInfo().IsAssignableFrom(typeof(Math).GetTypeInfo())
GetTypeInfo()
уводит вас от Type
к TypeInfo
, и метод расширения AsType()
возвращает вас от TypeInfo
к Type
.
Как вы уже, наверное, уже догадались, касаемо приложений Windows 8 и ее модели безопасности, вы можете получить доступ только к открытым членам – вы не можете получить доступ к закрытым членам. Опять же, эти изменения предназначены строго для приложений Windows 8. Если вы ориентируетесь на .NET 4.5 за пределами Windows 8, вы все еще можете использовать полный класс Type
.