Внимание

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

Обращение к полю класса выполняется с помощью операции доступа (точка). Справа от точки задается имя поля, слева — имя экземпляра для обычных полей или имя класса для статических. В листинге 5.1 приведен пример простого класса Demo и два способа обращения к его полям.

using System;

namespace ConsoleApplication1

{

class Demo

{

public int a = 1; // поле данных

public const double c = 1.66; // константа

public static string s = "Demo"; // статическое поле класса

double y; // закрытое поле данных

}

 

class Class1

{ static void Main()

{

Demo x = new Demo(); // создание экземпляра класса Demo

Console.WriteLine( x.a ); // x.a - обращение к полю класса

Console.WriteLine( Demo.c ); // Demo.c - обращение к константе

Console.WriteLine( Demo.s ); // обращение к статическому полю

}

}

}

Листинг 5.1. Класс Demo, содержащий поля и константу (html, txt)

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