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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ПолноС руководство. Π‘# 4.0Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 156

Автор Π¨ΠΈΠ»Π΄Ρ‚ Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚

extern Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉΡ‚ΠΈΠΏ имямСтода(список_Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²);ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° отсутствиС Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок.Π’ Π΄Π°Π½Π½ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово extern Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ примСняСтся вмСстС с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ DllImport, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ DLL, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТится Π²Π½Π΅ΡˆΠ½ΠΈΠΉΠΌΠ΅Ρ‚ΠΎΠ΄. Атрибут DllImport ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ пространству ΠΈΠΌΠ΅Π½ System.Runtime.InteropServices. Он допускаСт нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΠΎΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ лишь имя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DLL, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТится внСшний ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, внСшниС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ слСдуСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π‘. (Если ΠΆΠ΅ это дСлаСтся Π½Π° Π‘++, тоимя внСшнСго ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ DLL ΠΏΡƒΡ‚Π΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ².)Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ стало понятнСС, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ внСшними ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, обратимсяк ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, состоящСй ΠΈΠ· Π΄Π²ΡƒΡ… Ρ„Π°ΠΉΠ»ΠΎΠ². НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ исходный ΠΊΠΎΠ΄ Π‘ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ExtMeth.с, Π³Π΄Π΅ опрСдСляСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ AbsMax().include

int __declspec(dllexport) AbsMax(int a, int b) { return abs(a) < abs(b) ? abs(b) : abs(a);}Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ AbsMax() ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ значСния Π΄Π²ΡƒΡ… Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ возвращаСтся самоС большоС ΠΈΠ· Π½ΠΈΡ…. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ _declspec(dllexport). Π­Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ языка Π‘ для программныхсрСдств ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ†ΠΈΠΈ Microsoft. Оно увСдомляСт компилятор ΠΎ нСобходимости ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ AbsMax() ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DLL, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ содСрТится. Для компилирования Ρ„Π°ΠΉΠ»Π° ExtMeth.с Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС указываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

CL /LD /MD ExtMeth.сВ ΠΈΡ‚ΠΎΠ³Π΅ создаСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» DLL β€” ExtMeth.dll.Π”Π°Π»Π΅Π΅ слСдуСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Π‘#, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ примСняСтся внСшний ΠΌΠ΅Ρ‚ΠΎΠ΄AbsMax().

using System;using System.Runtime.InteropServices;

class ExternMeth {// Π—Π΄Π΅ΡΡŒ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ внСшний ΠΌΠ΅Ρ‚ΠΎΠ΄.[DllImport("ExtMeth.dll")]public extern static int AbsMax(int a, int b);static void Main() { // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ внСшний ΠΌΠ΅Ρ‚ΠΎΠ΄. int max = AbsMax(-10, β€”20); Console.WriteLine(max);}

}ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° использованиС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° DllImport Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Он увСдомляСт компилятор ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DLL, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰Π΅ΠΉΠ²Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ AbsMax(). Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это Ρ„Π°ΠΉΠ» ExtMeth.dll, созданный Π²ΠΎ врСмя компиляции Ρ„Π°ΠΉΠ»Π° с исходным тСкстом ΠΌΠ΅Ρ‚ΠΎΠ΄Π° AbsMax() Π½Π° Π‘. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° экран, ΠΊΠ°ΠΊ ΠΈ оТидалось, выводится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 20.#### ОбъявлСниС псСвдонима внСшнСй сборкиВо Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово extern прСдоставляСт псСвдоним длявнСшнСй сборки, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π² состав ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π΄Π²Π΅ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сборки с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ элСмСнта. Π’Π°ΠΊ, Ссли Π² сборкС test1 содСрТится класс MyClass, Π° Π² сборкС test2 класс с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ кклассу ΠΏΠΎ этому ΠΈΠΌΠ΅Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚.Для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ псСвдоним каТдойсборки. Π­Ρ‚ΠΎ дСлаСтся Π² Π΄Π²Π° этапа. На ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ псСвдонимы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ компилятора /r, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

/r:Asm1=test1/r:Asm2=test2А Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌ этапС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ввСсти ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом extern, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… дСлаСтся ссылка Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ псСвдонимы. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ„ΠΎΡ€ΠΌΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° для создания псСвдонима сборки.

extern alias имя_сборки;Если ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки ΠΊΠΎΠ΄Π°.

extern alias Asm1;extern alias Asm2;Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° класса MyClass Π±ΡƒΠ΄ΡƒΡ‚ доступны Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ псСвдониму.Рассмотрим ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ дСмонстрируСтся ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π½Π΅ΡˆΠ½ΠΈΡ… псСвдонимов. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². НиТС привСдСнисходный тСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» β€” test1.cs.

using System;

namespace MyNS { public class MyClass { public MyClass() { Console.WriteLine("ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° MyClass1.dll."); } }}Π”Π°Π»Π΅Π΅ слСдуСт исходный тСкст ΠΈΠ· Ρ„Π°ΠΉΠ»Π° test2.cs.

using System;

namespace MyNS { public class MyClass { public MyClass() { Console.WriteLine("ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° MyClass2.dll."); } }}ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ±ΠΎΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ…, test1.cs ΠΈ test2.cs, ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΈΠΌΠ΅Π½ MyNS ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² этом пространствС Π² ΠΎΠ±ΠΎΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ… опрСдСляСтся класс MyClass. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π±Π΅Π· псСвдонима ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° класса MyClassΠ±ΡƒΠ΄ΡƒΡ‚ нСдоступными Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ исходный тСкст ΠΈΠ· Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° test3.cs, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° класса MyClass ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² test1.cs ΠΈ test2.cs. Π­Ρ‚ΠΎ становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ благодаря ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ с внСшними псСвдонимами.

// ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ с внСшними псСвдонимами Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² самом Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π°.extern alias Asm1;extern alias Asm2;using System;

class Demo { static void Main() { Asm1::MyNS.MyClass t = new Asm1::MyNS.MyClass(); Asm2::MyNS.MyClass t2 = new Asm2::MyNS.MyClass(); }}Π‘Π½Π°Ρ‡Π°Π»Π° слСдуСт ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ test1.cs ΠΈ test2.cs Π² ΠΈΡ… библиотСчныСэквивалСнты DLL. Для этого достаточно ввСсти Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

csc /t:library test1.cscsc /t:library test2.csΠ—Π°Ρ‚Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» test3.cs, ΡƒΠΊΠ°Π·Π°Π² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС

csc /r:Asm1=test1.dll /r:Asm2=test2.dll test3.csΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° /r, ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡŽΡ‰Π΅Π³ΠΎ компиляторо Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ссылка Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ находится Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Π°ΠΉΠ»Π΅. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС псСвдоним Asm1 связываСтся с Ρ„Π°ΠΉΠ»ΠΎΠΌ test1.dll, Π° псСвдоним Asm2 β€” с Ρ„Π°ΠΉΠ»ΠΎΠΌtest2.dll.Π’ самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ псСвдонимы ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅ опСраторахс ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ extern, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² самом Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π°.

extern alias Asm1;extern alias Asm2;А Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Main() псСвдонимы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ нСоднозначностиссылок Π½Π° класс MyClass. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ псСвдонимадля обращСния ΠΊ классу MyClass.

Asm1::MyNS.MyClassΠ’ этой строкС ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ указываСтся псСвдоним, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½, Π΄Π°Π»Π΅Π΅ имя пространства ΠΈΠΌΠ΅Π½, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится класс с Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, имя самого класса, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ послС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°-Ρ‚ΠΎΡ‡ΠΊΠΈ.Π’Π° ΠΆΠ΅ самая общая Ρ„ΠΎΡ€ΠΌΠ° ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Π° ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π½Π΅ΡˆΠ½ΠΈΡ… псСвдонимов.НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° MyClass1.dll.ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° MyClass2.dll.```

ГЛАВА 21. ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΈΠΌΠ΅Π½ System

Π’ этой Π³Π»Π°Π²Π΅ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ пространствС ΠΈΠΌΠ΅Π½ System.Π­Ρ‚ΠΎ пространство ΠΈΠΌΠ΅Π½ самого Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ классов для срСды .NET Framework. Π’ нСмнСпосрСдствСнно находятся Ρ‚Π΅ классы, структуры, интСрфСйсы, Π΄Π΅Π»Π΅Π³Π°Ρ‚Ρ‹ ΠΈ пСрСчислСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡Π°Ρ‰Π΅ всСго ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° C# ΠΈΠ»ΠΈ ΠΆΠ΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ срСды .NET Framework. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, пространство ΠΈΠΌΠ΅Π½ System составляСт ядро Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π΅ΠΌΠΎΠΉΠ·Π΄Π΅ΡΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ классов.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² пространство ΠΈΠΌΠ΅Π½ System Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ½ΠΎΠ³ΠΎΠ²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… пространств ΠΈΠΌΠ΅Π½, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ подсистСмы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ System.Net. НСкоторыС изэтих пространств ΠΈΠΌΠ΅Π½ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π°Π»Π΅Π΅ Π² этой ΠΊΠ½ΠΈΠ³Π΅. А Π² этой Π³Π»Π°Π²Π΅ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Ρ‡Π»Π΅Π½Π°Ρ… самого пространства ΠΈΠΌΠ΅Π½ System.Π§Π»Π΅Π½Ρ‹ пространства ΠΈΠΌΠ΅Π½ System

Помимо большого количСства классов ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π² пространствС ΠΈΠΌΠ΅Π½ содСрТатся ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ классы.ActivationContextActivatorAppDomainAppDomainManagerAppDomainSetupApplicationldApplicationldentityArrayAssemblyLoadEventArgsAttributeAttributeUsageAttributeBitConverterBufferCharEnumeratorCLSCompliantAttributeConsoleConsoleCancelEventArgsContextBoundObjectContextStaticAttributeConvertDBNullDelegateEnumEnvironmentEventArgsExceptionFileStyleUriParserFlagsAttributeFtpStyleUriParserGCGenericUriParserGopherStyleUriParserHttpStyleUriParserLazy<T>Lazy<T, TMetadata>LdapStyleUriParserLoaderOptimizationAttributeLocalDataStoreSlotMarshalByRefObjectMathMTAThreadAttributeMulticastDelegateNetPipeStyleUriParserNetTcpStyleUriParserNewsStyleUriParserNonSerializedAttributeNullableObjectObsoleteAttributeOperatingSystemParamArrayAttributeRandomResolveEventArgsSerializableAttributeSTAThreadAttributeStringStringComparerThreadStaticAttri bute TimeZone TimeZonelnfoTimeZonelnfoAdjustmentRuleTuple Tuple<...> (Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹)TypeUnhandledExceptionEventArgs UriUriBuilderUriParser UriTemplateUriTemplateEquivalenceComparerUriTemplateMatchUriTemplateTableUriTypeConverterValueTypeVersionWeakReference