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



страница66/84
Дата03.01.2022
Размер0.54 Mb.
#112941
ТипПрограма
1   ...   62   63   64   65   66   67   68   69   ...   84
Класове
Свързани:
Изпитна тема1, Изпитна тема2
[] static ([
])


{

}

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

1.  Създава се обект от класа.

2.  Достъпен е статичен елемент от класа (поле, метод, свойство).

Най-често статичните конструктори се използват за инициализацията на статични полета.



Статичен конструктор – пример

Да разгледаме един пример за използването на статичен конструктор. Искаме да направим клас, който изчислява бързо корен квадратен от цяло число и връща цялата част на резултата – също цяло число. Тъй като изчисля­ването на корен квадратен е времеотнемаща математическа операция, включваща пресмятания с реални числа и изчисляване на сходящи редове, е добра идея тези изчисления да се изпълнят еднократно при стартиране на програмата, а след това да се използват вече изчислени стойности. Разбира се, за да се направи такова предварително изчисление (precomputation) на всички квадратни корени в даден диапазон, трябва първо да се дефинира този диапазон и той не трябва да е прекалено широк (например от 1 до 1000). След това е необходимо при първо поиск­ване на корен квадратен на дадено число да се преизчислят всички квадратни корени в дадения диапазон, а след това да се върне вече готовата изчислена стойност. При следващо поискване на корен квадра­тен, всички стойности в дадения диапазон са вече изчислени и се връщат директно. Ако пък никога в програмата не се изчислява корен квадратен, предварителните изчисления трябва изобщо да не се изпълнят.

Чрез описания подход първоначално се инвестира някакво процесорно време за предварителни изчисления, но след това извличането на корен квадратен се извършва изключително бързо. Ако изчисляването на корен квадратен се извършва многократно, преизчислението ще увеличи значи­телно производителността.

Всичко това може да се имплементира в един статичен клас със статичен конструктор, в който да се преизчисляват квадратните корени. Вече изчислените резултати могат да се съхраняват в статичен масив. За извличане на вече преизчислена стойност може да се използва статичен метод. Тъй като предварителните изчисления се извършват в статичния конструктор, ако класът за преизчислен корен квадратен не се използва, те няма да се извършат и ще се спести процесорно време и памет. Ето как би могла да изглежда имплементацията:



static class SqrtPrecalculated

{

public const int MaxValue = 1000;



// Static field

private static int[] sqrtValues;

 

// Static constructor



static SqrtPrecalculated()

{

sqrtValues = new int[MaxValue + 1];



for (int i = 0; i < sqrtValues.Length; i++)

{

sqrtValues[i] = (int)Math.Sqrt(i);



}

}

 



// Static method

public static int GetSqrt(int value)

{

if ((value < 0) || (value > MaxValue))



{

throw new ArgumentOutOfRangeException(String.Format(

"The argument should be in range [0..{0}].",

MaxValue));

}

return sqrtValues[value];



}

}

 



class SqrtTest

{

static void Main()



{

Console.WriteLine(SqrtPrecalculated.GetSqrt(254));

// Result: 15

}

}



Изброени типове (enumerations)

По-рано в тази глава ние разгледахме какво представляват константите, как се декларират и как се използват. В тази връзка, сега ще разгледаме една конструкция от езика С#, при която можем множество от константи, които са свързани логически, да ги свържем и чрез средствата на езика. Това средство на езика са така наречените изброени типове.

Декларация на изброените типове



Сподели с приятели:
1   ...   62   63   64   65   66   67   68   69   ...   84




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

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