Net framework 5, а также среды Visual Studio 2012 и C#


Глава.23 .Загрузка.сборок.и.отражение нахождение типов, определенных в сборке



Download 6,27 Mb.
Pdf ko'rish
bet477/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   473   474   475   476   477   478   479   480   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

644
Глава.23 .Загрузка.сборок.и.отражение
нахождение типов, определенных в сборке
Отражение часто используется, чтобы выяснить, какие типы определены в сборке. 
Для получения этой информации FCL предлагает несколько методов. Наиболее 
популярный — свойство 
ExportedTypes
класса 
Assembly
. Вот пример кода, который 
загружает сборку и выводит имена всех определенных в ней открытых экспорти-
рованных типов:
using System;
using System.Reflection;
public static class Program {
public static void Main() {
String dataAssembly = "System.Data, version=4.0.0.0, " +
"culture=neutral, PublicKeyToken=b77a5c561934e089";
LoadAssemAndShowPublicTypes(dataAssembly);
}
private static void LoadAssemAndShowPublicTypes(String assemId) {
// Явная загрузка сборки в домен приложений
Assembly a = Assembly.Load(assemId);
// Цикл выполняется для каждого типа,
// открыто экспортируемого загруженной сборкой
foreach (Type t in a.ExportedTypes) {
// Вывод полного имени типа
Console.WriteLine(t.FullName);
}
}
}
Объект Type
Приведенный выше код перебирает массив объектов 
System.Type
. Тип 
System.
Type
— отправная точка для операций с типами и объектами. Он представляет 
ссылку на тип (в отличие от определения типа).
Как вы помните, в 
System.Object
определен открытый невиртуальный метод 
GetType
. При вызове этого метода CLR определит тип указанного объекта и вернет 
ссылку на его объект 
Type
. Поскольку для каждого типа в домене приложений есть 
только один объект 
Type
, чтобы выяснить, относятся ли объекты к одному типу, 
можно задействовать операторы равенства и неравенства:
private static Boolean AreObjectsTheSameType(Object o1, Object o2) {
return o1.GetType() == o2.GetType();
}
Помимо вызова метода 
GetType
класса 
Object
FCL предлагает другие способы 
получения объекта 
Type
:
‰
В типе 
System.Type
есть несколько перегруженных версий статического метода 
GetType
. Все они принимают тип 
String
. Эта строка должна содержать полное 


645
Производительность.отражения
имя типа (включая его пространства имен). Имена примитивных типов, под-
держиваемые компилятором (такие, как 
int

string

bool
и другие типы языка 
C#), запрещены, потому что они ничего не значат для CLR. Если строка содер-
жит просто имя типа, метод проверяет, определен ли тип с указанным именем 
в вызывающей сборке. Если это так, возвращается ссылка на соответствующий 
объект 
Type
.
‰
Если в вызывающей сборке указанный тип не определен, проверяются типы, 
определенные в 
MSCorLib dll
. Если и после этого тип с указанным именем 
найти не удается, возвращается 
null
или генерируется исключение 
System.
TypeLoadException
— все зависит от того, какая перегруженная версия метода 
GetType
вызывалась и какие ей передавались параметры. В документации на 
FCL есть исчерпывающее описание этого метода.
В 
GetType
можно передать полное имя типа с указанием сборки, например:
"System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
В этом случае 
GetType
будет искать тип в указанной сборке (и при необхо-
димости загрузит ее).
‰
В типе 
System.Type
есть статический метод 
ReflectionOnlyGetType
. Этот метод 
ведет себя так же, как только что описанный метод 
GetType
, за исключением того, 
что тип загружается только для отражения, но не для выполнения кода.
‰
В типе 
System.TypeInfo
есть экземплярные методы 
DeclaredNestedTypes
и 
GetDeclaredNestedTypes
.
‰
В типе 
System.Reflection.Assembly
есть экземплярные методы 
GetType

De-
finedTypes 
и 
ExportedTypes
.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   473   474   475   476   477   478   479   480   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish