Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π—Π«Πš ΠŸΠ ΠžΠ“Π ΠΠœΠœΠ˜Π ΠžΠ’ΠΠΠ˜Π― Π‘# 2005 И ΠŸΠ›ΠΠ’Π€ΠžΠ ΠœΠ .NET 2.0. 3-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 106

Автор Π­Π½Π΄Ρ€ΡŽ ВроСлсСн

Assembly

-------------------------------------------------------------

 Token: 0x20000001

 Name: CarLibrary

 Public Key: 00 24 00 00 04 80 00 00 // ΠΈ Ρ‚.Π΄.

 Hash Algorithm: 0x00008004

 Major Version: 0x00000002

 Minor Version: 0x00000000

 Build Number: 0x00000000

 Revision Number: 0x000000000

 Locale: β€Ήnullβ€Ί

 Flags: [SideBySideCompatible] (00000000)

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ссылок Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ

Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ ΠΌΠ΅Ρ‚ΠΊΠ΅ Assembly ΠΈ Π½Π°Π±ΠΎΡ€Ρƒ ΠΌΠ΅Ρ‚ΠΎΠΊ TypeDef ΠΈ TypeRef ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ .NET ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ "AssemblyRef #n", Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ внСшниС ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ. НапримСр, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ CarLibrary.dll ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏ MessageBox, Π² ΠΎΠΊΠ½Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΊΡƒ AssemblyRef для System.Windows.Forms.

AssemblyRef #2

-------------------------------------------------------------

 Token: 0x23000002

 Public Key or Token: b7 7a 5c 56 19 34 e0 89

 Name: System.Windows.Forms

 Version: 2.0.3600.0

 Major Version: 0x00000002

 Minor Version: 0x00000000

 Build Number: 0x00000e10

 Revision Number: 0x00000000

 Locale: β€Ήnullβ€Ί

 HashValue Blob:

 Flags: [none] (00000000)

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ²

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ нашСго обсуТдСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… .NET ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ всС строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΎΠΊΠ½Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ildasm.exe ΠΏΠΎΠ΄ Π·Π½Π°ΠΊΠΎΠΌ ΠΌΠ΅Ρ‚ΠΊΠΈ User Strings, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅[1].

User Strings

70000001: (11) L"Car 2.0.0.0"

70000019: (11) L"Jamming {0}"

70000031: (13) L"Quiet time…"

7000004d: (14) L"Ramming speed!"

7000006b: (19) L"Faster is better."

70000093: (16) L"Time to call AAA"

700000b5: (16) L"Your car is dead"

700000d7: (9) L"Be quiet "

700000eb: (2) L"!!"

Пока Ρ‡Ρ‚ΠΎ Π½Π΅ слишком Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎΠΌ синтаксисС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… .NET. Π‘ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ .NET Π΄Π°ΡŽΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС всСх Ρ‚ΠΈΠΏΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈ всСх Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² этом Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ссылки.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ вас Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ вопрос: Ссли Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² прилоТСниях? Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Ρ‚Π°ΠΊΠΎΠ΅ понятиС, ΠΊΠ°ΠΊ сСрвисы отобраТСния .NET. А вопрос ΠΎ пользС ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Ρ… Π½ΠΈΠΆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΌΡ‹ оставим ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Π΄ΠΎ рассмотрСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² ΠΊΠΎΠ½Ρ†Π΅ этой Π³Π»Π°Π²Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ΡΡŒ тСрпСния.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π’ ΠΎΠΊΠ½Π΅ MetaInfo ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ildasm.exe Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ряд ΠΌΠ΅Ρ‚ΠΎΠΊ CustomAttribute, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для обозначСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. Роль Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² .NET ΠΌΡ‹ обсудим Π² этой Π³Π»Π°Π²Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π² .NET

Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… .NET ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ процСсс выяснСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ° срСдой выполнСния. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ сСрвисы отобраТСния, Ρ‚Ρƒ ΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, которая отобраТаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ildasm.exe, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ. НапримСр с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ отобраТСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх Ρ‚ΠΈΠΏΠΎΠ², содСрТащихся Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ (ΠΈΠ»ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ *.netmodule), Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, поля, свойства ΠΈ события, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. МоТно Ρ‚Π°ΠΊΠΆΠ΅ динамичСски Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ€ интСрфСйсов поддСрТиваСтся Π΄Π°Π½Π½Ρ‹ΠΌ классом (ΠΈΠ»ΠΈ структурой), Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ подробности (Π±Π°Π·ΠΎΠ²Ρ‹Π΅ классы, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ пространства ΠΈΠΌΠ΅Π½, Π΄Π°Π½Π½Ρ‹Π΅ манифСста ΠΈ Ρ‚.Π΄.).

Подобно Π»ΡŽΠ±ΠΎΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ пространству ΠΈΠΌΠ΅Π½, System.Reflection содСрТит ряд связанных Ρ‚ΠΈΠΏΠΎΠ². Π’ Ρ‚Π°Π±Π». 12.1 приводится список элСмСнтов этого пространства ΠΈΠΌΠ΅Π½, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Π°ΠΌ слСдуСт Π·Π½Π°Ρ‚ΡŒ.

Π’Π°Π±Π»ΠΈΡ†Π° 12.1. НСкоторыС элСмСнты пространства ΠΈΠΌΠ΅Π½ System.Reflection

Π’ΠΈΠΏ ОписаниС Assembly Π­Ρ‚ΠΎΡ‚ класс (вмСстС с мноТСством связанных Ρ‚ΠΈΠΏΠΎΠ²) ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ряд ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ, ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ AssemblyName Класс, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ многочислСнныС подробности, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° (ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ вСрсии, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Ρ‚.Π΄.) EventInfo Класс, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ событии FieldInfo Класс, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ»Π΅ MemberInfΠΎ Абстрактный Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ‰ΠΈΠ΅ характСристики повСдСния для Ρ‚ΠΈΠΏΠΎΠ² EventInfo, Fieldlnfo, MethodInfo ΠΈ PropertyInfo MethodInfo Класс, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Module Класс, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ParameterInfo Класс, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ PropertyInfo Класс, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ свойствС

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ пространство ΠΈΠΌΠ΅Π½ System.Reflection для чтСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… .NET ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ срСдствами, ΠΌΡ‹ с Π²Π°ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с возмоТностями класса System.Type.

Класс System.Type

Класс System.Type опрСдСляСт ряд Ρ‡Π»Π΅Π½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для чтСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· этих Ρ‡Π»Π΅Π½ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ‚ΠΈΠΏΡ‹ ΠΈΠ· пространства ΠΈΠΌΠ΅Π½ System.Reflection. НапримСр, Ρ‚ΠΈΠΏ Type.GetMethods() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив Ρ‚ΠΈΠΏΠΎΠ² MethodInfo, Ρ‚ΠΈΠΏ Type.GetFields() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив Ρ‚ΠΈΠΏΠ° FieldInfo ΠΈ Ρ‚.Π΄. ΠŸΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ² System.Type ΠΎΡ‡Π΅Π½ΡŒ Π²Π΅Π»ΠΈΠΊ. Π’ Ρ‚Π°Π±Π». 12.2 прСдлагаСтся нСбольшой список Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΈΠ· Π½ΠΈΡ… (подробности описания ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ .NET Framework 2.0 SDK).

Π’Π°Π±Π»ΠΈΡ†Π° 12.2. Π˜Π·Π±Ρ€Π°Π½Π½Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ System.Type

Π’ΠΈΠΏ ОписаниС IsAbstract IsArray IsClass IsCOMObject IsEnum IsGenerlcTypeDefinition IsGenericParameter Islnterface IsPrimitive IsNestedPrivate IsNestedPublic IsSealed IsValueType Π­Ρ‚ΠΈ свойства (наряду с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌΠΈ) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ряд основных характСристик ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π’ΡƒΡ€Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, являСтся Π»ΠΈ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ абстрактным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, массивом, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ классом ΠΈ Ρ‚.Π΄.) GetConstructors() GetEvents() GetFields() GetInterfaces() GetMembers() GetMethods() GetNestedTypes() GetProperties() Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (наряду с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌΠΈ) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ всС элСмСнты ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π° (интСрфСйсы, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, свойства ΠΈ Ρ‚.ΠΏ.). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ свой массив (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GetFields() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив FieldInfΠΎ, GetMethods() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив MethodInfo ΠΈ Ρ‚.Π΄.). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒ СдинствСнного числа (GetMethod(), GetProperty() ΠΈ Ρ‚.Π΄.), которая позволяСт ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ элСмСнт ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π° Π½Π΅ всС связанныС элСмСнты FindMembers() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив Ρ‚ΠΈΠΏΠΎΠ² MemberInfo Π½Π° основС Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π² поиска GetType() БтатичСский ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ экзСмпляр Π’ΡƒΡ€Π΅ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ строковому ΠΈΠΌΠ΅Π½ΠΈ InvokeMember() ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ привязку ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ элСмСнту

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π’ΡƒΡ€Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ System.Object.GetType()

ЭкзСмпляр класса Π’ΡƒΡ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ мноТСством способов. НСльзя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСпосрСдствСнно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π’ΡƒΡ€Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для этого ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово new, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ класс Π’ΡƒΡ€Π΅ являСтся абстрактным. Π§Ρ‚ΠΎΠ±Ρ‹ привСсти ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· допустимых возмоТностСй, Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ System.Object опрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ GetType(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ экзСмпляр класса Π’ΡƒΡ€Π΅, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ экзСмпляра SportsCar.

SportsCar sc = new SportsCar();

Type t = sc.GetType();

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Ρ‚ΠΈΠΏΠ΅ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это Ρ‚ΠΈΠΏ SportsCar) Π²ΠΎ врСмя компиляции. ΠŸΡ€ΠΈ этом становится ясно, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ инструмСнты, ΠΊΠ°ΠΊ ildasm.exe, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… ΠΏΡƒΡ‚Π΅ΠΌ нСпосрСдствСнно Π²Ρ‹Π·ΠΎΠ²Π° System.Object.GetType(), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ildasm.exe Π½Π΅ компилируСтся вмСстС с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π’ΡƒΡ€Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ System.Type.GetType()

Π‘ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ обСспСчиваСтся использованиСм статичСского Ρ‡Π»Π΅Π½Π° GetType() класса System.Type с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° Π² Π²ΠΈΠ΄Π΅ строки. ΠŸΡ€ΠΈ использовании Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° для извлСчСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠΆΠ΅ Π½Π΅ трСбуСтся информация ΠΎ Ρ‚ΠΈΠΏΠ΅ Π²ΠΎ врСмя компиляции, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Type.GetType() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ экзСмпляр "вСздСсущСго" System.String.