Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч


Download 2.46 Mb.
bet28/91
Sana19.10.2023
Hajmi2.46 Mb.
#1709453
TuriУчебно-методический комплекс
1   ...   24   25   26   27   28   29   30   31   ...   91
Bog'liq
Язык программирования C#

6.8. Константы и readonly поля

Как и поля, константы в языке C# могут быт объявлены только внутри классов или структур. Для объявления константы используют ключевое слово const, которое ставится сразу за спецификатором доступа. Сразу за именем константы должно следовать присеваемое ей значение.


const int i = 0;


private const int j = 100;
public Double Hunsrad = 100;
protected const string Str = "string";
internal const Decimal Number = 1000;
Лист. 6.22

К константам, как и к статическим полям, обращаются по имени класса.


Math.PI;
Math.E;
Лист. 6.23

Помимо констант существуют еще и доступные только для чтения поля, также их называют неизменяемыми полями. Неизменяемые поля класса могут быть определяются спецификатором readonly.


Значение неизменяемых полей может быть задано сразу при их определении, как это делается для констант.


public readonly int y = 5;


Лист. 6.24

Значение неизменяемых полей может быть также установлено при создании объекта класса конструктором.


// неизменяемые поля


class Rectangel
{
readonly int X1, Y1;
readonly int X2, Y2;

public int Perimeter


{
get
{
return 2 * (Math.Abs(X2 - X1) + Math.Abs(Y2 - Y1));
}
}

public Rectangel(int X1, int Y1, int X2, int Y2)


{
this.X1 = X1;
this.Y1 = Y1;

this.X2 = X2;


this.Y2 = Y2;
}
}
Лист. 6.25

В этом листинге определен класс Rectangel с четырьмя неизменяемыми полями, инициализируемыми конструктором при создании объекта.


class Program


{
static void Main(string[] args)
{
Rectangel R1, R2;
R1 = new Rectangel(10,20,10,40);
R2 = new Rectangel(20, 20, 50, 50);

Console.WriteLine("Периметр 1-ого прямоугольника: {0}",


R1.Perimeter);
Console.WriteLine("Периметр 2-ого прямоугольника: {0}",
R2.Perimeter);
}
}
Лист. 6.26
Далее мы создаем два объекта класса Rectangel R1 и R2. При их создании инициализируются поля только для чтения. Затем выводим периметры получившихся прямоугольников.
Вывод программы:

Периметр 1-ого прямоугольника: 40


Периметр 2-ого прямоугольника: 120
Вывод. 6.5

Неизменяемые поля можно также пометить, как статические, тогда их значение устанавливается статическим конструктором.


class LaunchClass


{
// статические неизменяемые поля
static readonly int Year;
static readonly int Month;
static readonly int Day;

static readonly int Hour;


static readonly int Minut;
static readonly int Millisecond;

public static void TimePath()


{
DateTime Now = DateTime.Now;
Console.WriteLine("С момента инициализации класса
прошло:");

Console.WriteLine("{0} лет", Math.Abs(Now.Year - Year));


Console.WriteLine("{0} месяцев", Math.Abs(Now.Month –
Month));
Console.WriteLine("{0} дней", Math.Abs(Now.Day - Day));
Console.WriteLine("{0} часов", Math.Abs(Now.Hour - Hour));
Console.WriteLine("{0} секунд", Math.Abs(Now.Minute –
Minut));
Console.WriteLine("{0} миллисекунд",
Math.Abs(Now.Millisecond – Millisecond));
}

static LaunchClass()


{
DateTime Now = DateTime.Now;

Year = Now.Year;


Month = Now.Month;
Day = Now.Day;

Hour = Now.Hour;


Minut = Now.Minute;
Millisecond = Now.Millisecond;
}
}
Лист. 6.27
В классе LaunchClass определены несколько статических неизменяемых переменных. Эти переменные хранят полную дату инициализации класса средой .Net Framework. Эта инициализация происходит посредствам статического конструктора, который и фиксирует точное время инициализации класса.
Статический метод TimePath() выводит на консоль прошедшее с момента игициализации и до момента его вызова время.
class Program
{
static void Main(string[] args)
{
LaunchClass.TimePath();

for (int i = 0; i < 100; i++)


Thread.Sleep(10);

LaunchClass.TimePath();


}
}
Данная программа работает с классом LaunchClass. Сначала вызывает метод LaunchClass.TimePath(), это делается, для того чтобы среда .Net Framework инициализировала класс. Затем в цикле ждем некоторое время и снова вызываем LaunchClass.TimePath().
Вывод программы:
С момента инициализации класса прошло:
0 лет
0 месяцев
0 дней
0 часов
0 секунд
0 миллисекунд
С момента инициализации класса прошло:
0 лет
0 месяцев
0 дней
0 часов
0 секунд
563 миллисекунд
Press any key to continue . . .
Вывод. 6.5

Download 2.46 Mb.

Do'stlaringiz bilan baham:
1   ...   24   25   26   27   28   29   30   31   ...   91




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