Шаг 115 - Ключевое слово const

В С# есть ключевое слово "const", оно означает, что поле с объявленное с этим ключевым словом является неизменным в течении всего жизненного цикла приложения. Во первых значение поля устанавливается программистом во время компиляции и должно быть записано в виде литерала. Во вторых поле является static, так что не нужно создавать экземпляр класса, к полю нужно обращаться как к static.

Всё это хорошо, но определение как const означает, что значение поля устанавливается во время компиляции, но что если это значение этого поля не известно во время компиляции? Эта проблем решена с помощью неизменяемого поля. Определяя поле как readonly, вы можете только в конструкторе класса. При попытке его изменить в другом месте получите ошибку. Это очень важно к примеру при определении размера экрана. На первый взгляд это кажется то, что нужно. Но есть одна проблема нужно для этого создать экземпляр класса, но нам это не нужно. Эта проблема очень просто решается с помощью объявления нужных нам полей как static и readonly, а конструктора с модификатором static. Далее приводится небольшой пример , для получения разрешения экрана.

using System;
using System.WinForms;
using System.Drawing;
internal class Demonstrate
{
	class MonitorResolution1
	{
		public const int width = 1024;
		public const int height = 760;
	}
	class MonitorResolutionNow
	{
		public static readonly int width;
		public static readonly int height;
		static MonitorResolutionNow ()
		{
			Rectangle bounds = Screen.GetBounds(new Point(0, 0));
			width = bounds.Width;
			height = bounds.Height;
		}
	}
	
	public static void Main()
	{
		Console.WriteLine("ширина {0} высота{1}",
			MonitorResolution1.width,
			MonitorResolution1.height);
		Console.WriteLine("ширина {0} высота{1}",
			MonitorResolutionNow.width,
			MonitorResolutionNow.height);
	}
}

Здесь мы видим, что не создавая экземпляр класса MonitorResolutionNow мы получаем высоту и ширину экрана.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Leonid Molochniy.