Статические члены и члены экземпляров

Вы можете определить член класса как статический (static member) или член экземпляра (instance member). По умолчанию каждый член определен как член экземпляра. Это значит, что для каждого экземпляра класса делается своя копия этого члена. Когда член объявлен как статический, имеется лишь одна его копия. Статический член создается при загрузке содержащего класс приложения и существует в течение жизни приложения. Поэтому вы можете обращаться к члену, даже если экземпляр класса еще не создан.

Константы

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

Язык C# не поддерживает методы, свойства и события с ключевым словом const.

Константы должны инициализировать сразу после объявления. Несколько констант одного типа можно объявить одновременно. Используемое для инициализации константы выражение может ссылаться на другую константу, если при этом не создается циклическая ссылка. Доступ к константам осуществляется статически.

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

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

 

Определяя поле с помощью ключевого поля readonly, вы можете установить значение поля лишь в одном месте — в конструкторе.

public readonly int ScreenWidth;

public GraphicsPackageO { this.ScreenWidth = 1024; } }

Если нужна константа, по определению статическая, но инициализируемая в период выполнения, нужно определить поле с обоими модификаторами — static и readonly, а затем создать особый — статический — тип конструктора. Статические конструкторы (static constructor) используются для инициализации статических, неизменяемых и других полей.

class GraphicsPackage {

public static readonly int ScreenWidth;

static GraphicsPackageO { ScreenWidth = 1024; } }

Свойства

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

Пример

class TimePeriod

{ private double seconds;

public double Hours

{ get { return seconds / 3600; }

set { seconds = value * 3600; } }}

Общие сведения о свойствах:

· Свойства позволяют классу предоставлять общий способ получения и задания значений, скрывая при этом код реализации или проверки.

· Метод доступа свойства get используется для возврата значения свойства, а метод доступа set используется для назначения нового значения. Эти методы доступа могут иметь различные уровни доступа.

· Ключевое слово value используется для определения значения, присваиваемого индексатором set.

· Свойства, которые не реализуют метод set, доступны только для чтения.

Методы

Метод представляет собой блок кода, содержащий набор инструкций. Программа инициирует выполнение операторов, вызывая метод и задавая необходимые аргументы метода. В C# все инструкции выполняются в контексте метода. Метод Main является точкой входа для каждого приложения C#, и вызывается он средой CLR при запуске программы.

Подписи метода

Методы объявляются в классе или в структуре путем указания уровня доступа, например public или private, необязательных модификаторов, например abstract или sealed, возвращаемого значения, имени метода и списка параметров этого метода. Все вместе эти элементы образуют подпись метода. Параметры заключаются в круглые скобки и разделяются запятыми. Пустые скобки указывают на то, что у метода нет параметров.

abstract class Motorcycle

{ public void StartEngine()

protected void AddGas(int gallons)

public virtual int Drive(int miles, int speed); }

public abstract double GetTopSpeed(); }

Доступ к методам

Вызов метода- после имени объекта ставится точка, затем имя метода и скобки. В скобках перечисляются аргументы, разделенные запятыми.

class TestMotorcycle : Motorcycle

{ public override double GetTopSpeed() { return 108.4; }

static void Main()

{ TestMotorcycle moto = new TestMotorcycle();

double speed = moto.GetTopSpeed();

Console.WriteLine("My top speed is {0}", speed); }}