Да си припомним: какво са класовете и обектите?



страница81/84
Дата03.01.2022
Размер0.54 Mb.
#112941
ТипПрограма
1   ...   76   77   78   79   80   81   82   83   84
Класове
Свързани:
Изпитна тема1, Изпитна тема2
(
)


Съответно, можем да използваме неизвестния тип K за параметрите в списъка с параметри на метода
, чийто тип не ни е известен, а също и като връщана стойност или за деклариране на променливи от типа заместител K в тялото на метода.

Например, нека разгледаме един метод, който разменя стойностите на две променливи:



public void Swap(ref K a, ref K b)

{

K oldA = a;



a = b;

b = oldA;

}


Това е метод, който разменя стойностите на две променливи, без да се интересува от типа им. Затова сме го типизирали, за да можем да го прилагаме за всякакви типове променливи.

Съответно, ако искаме да разменим стойностите на две целочислени и след това на две низови променливи, бихме използвали нашия метод :



int num1 = 3;

int num2 = 5;

Console.WriteLine("Before swap: {0} {1}", num1, num2);

// Invoking the method with concrete type (int)

Swap(ref num1, ref num2);

Console.WriteLine("After swap: {0} {1}\n", num1, num2);

 

string str1 = "Hello";



string str2 = "There";

Console.WriteLine("Before swap: {0} {1}!", str1, str2);

// Invoking the method with concrete type (string)

Swap(ref str1, ref str2);

Console.WriteLine("After swap: {0} {1}!", str1, str2);


Когато изпълним този код, резултатът ще е както очакваме:

Before swap: 3 5

After swap: 5 3

 

Before swap: Hello There!



After swap: There Hello!

Забелязваме, че в списъка с параметри сме използвали също и ключовата дума ref. Това е така, заради спецификата на това което прави методът – а именно да размени стойностите на две референции. При използването на ключовата дума ref, методът ще използва същата референция, която е подадена от извикващия метод. По този начин, всички промени, които са направени от нашия метод върху тази променлива, ще се запазят след приключване работата на нашия метод и връщане на контрола върху изпълнението на програмата обратно на извикващия метод.

Трябва да знаем, че при извикване на типизиран метод, можем да пропуснем изричното деклариране на конкретния тип (в нашия пример ), тъй като компилаторът ще го установи автоматично, разпозна­вайки типа на подадените параметри. С други думи, нашият код може да бъде опростен използвайки следните извиквания:



Swap(ref num1, ref num2); // Invoking the method Swap

Swap(ref str1, ref str2); // Invoking the method Swap



Трябва да знаем, че компилаторът ще може да разпознае какъв е конкрет­ния тип, само ако този тип участва в списъка с параметри. Компилаторът не може да разпознае какъв е конкретния тип на типизиран метод само от типа на връщаната стойност на метода или в случай, че методът е без параметри. В тези случаи, конкретния тип ще трябва да бъде подаден изрично. В нашия пример, това ще стане по подобие на първоначалното извикване на метода, чрез добавяне или .

Трябва да отбележим, че статичните методи също могат да бъдат типизи­рани за разлика от свойствата и конструкторите на класа.







Сподели с приятели:
1   ...   76   77   78   79   80   81   82   83   84




©obuch.info 2024
отнасят до администрацията

    Начална страница