Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
-C#_Lec14_OOP-1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
315.39 Кб
Скачать

14.4.1. Определение полей

Поля объявляются с типом подобно тому, как это делается со всеми прочими переменными [5 – Неш, C# 2010 Уск. Курс для проф.]. При этом также могут использоваться модификаторы доступа.

Определение поля: (MSDN_ООП_VB+C#_2010)

Class SampleClass

{ public string sampleField;

}

Во время создания объекта поля можно инициализировать, используя для этого различные способы. Простейший способ сделать это – прибегнуть к помощи инициализаторов. Они задаются в точке определения поля и могут применяться как для статических полей, так и для полей экземпляра, например:

private int х = 789; // Инициализация с помощью константы

private int z = A.InitZ(); // Инициализация с помощью метода

Следует обратить внимание, что эта инициализация происходит во время выполнения, а не во время компиляции. Поэтому при инициализации могут использоваться не только константы. Например, переменная z инициализируется вызовом метода A.InitZ() . Поначалу такое обозначение инициализации поля может показаться значительным сокращением, избавляющим от необходимости инициализировать все поля внутри тела конструктора. Однако для объявлений сложных типов все-таки рекомендуется инициализировать поля экземпляра внутри тела конструктора экземпляра.

14.4.2. Определение свойств

Свойства – один из самых замечательных механизмов С# и CLR, который позволяет достичь лучшей инкапсуляции. Если говорить коротко, то свойства используются для ужесточения контроля доступа к внутреннему состоянию объекта.

С точки зрения клиента объекта свойство выглядит и ведет себя аналогично общедоступному полю. Доступ к свойству организован так же, как и доступ к общедоступному полю экземпляра класса. Однако свойство не имеет никакого ассоциированного с ним места хранения в объекте, как это присуще полю. Вместо этого свойство предоставляет средства доступа для чтения и записи поля. Типичный шаблон предусматривает обеспечение доступа к приватному полю класса через общедоступное свойство.

Синтаксис определения свойства очень прост. Для его реализации нужно определить поле для хранения значения свойства, а затем реализовать базовую логику для хранения и извлечения этого значения соответственно в блоках set и get, например:

class SampleClass

{ private int sample; // Определение поля

public int Sample // Определение свойства

{ get

{ return sample; // Возвращение значения, сохраненного в поле

}

set

{ sample = value; // Сохранение значения в поле

}

}

}

Блок get вызывается, когда клиент объекта читает свойство, и обеспечивает возвращение значения поля, соответствующего свойству.

Блок set вызывается, когда клиент объекта пытается записать свойство. Обратите внимание, что в этом блоке нет возвращаемого значения, но есть специальная переменная value, которая доступна коду внутри этого блока и имеет тот же тип, что объявлен в качестве типа свойства. При записи значения в свойство именно через переменную value передается значение, которое клиент пытается присвоить свойству. При попытке объявить локальную переменную по имени value в блоке set, будет получена ошибка компиляции.

Пример 14.1. Определение класса T со свойством Temperature, которое просто возвращает или изменяет значение приватного поля temperature из внутреннего состояния экземпляра объекта. Затем создается объект (objT, экземпляр класса T), изменяется в нем значение указанного свойства и выводится на экран это значение.

using System;

public class T // Определение класса

{ private int temp; // Определение поля

public int Temperature // Определение свойства

{ get

{ Console.WriteLine("Извлечение значения temp.");

return temp; // Возврат значения, хранимого в поле

}

set

{ Console.WriteLine("Установка значения temp.");

temp = value; // Сохранение значения в поле

}

}

}

public class MainClass

{ static void Main() // Точка входа в программу

{ T objT = new T(); // Создание экземпляра класса (объекта)

objT.Temperature = 20; // Изменение значения свойства

Console.WriteLine("T = {0}", objT.Temperature);

// Вывод значения температуры (свойства)

Console.ReadLine(); // Ожидание нажатия клавиши <Enter>

}

}

/* Вывод:

Установка значения temp.

Извлечение значения temp.

T = 20

*/

В процессе создания экземпляра класса свойствам можно назначить исходные значения, для этого могут использоваться инициализаторы объектов:

// Установка значений свойств

SampleClass sampleObject = new SampleClass

{ FirstProperty = "A", SecondProperty = "B" };

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

Как было показано выше, у большинства свойств имеются блоки, как для задания, так и для возврата значения свойства. Однако можно создать свойства, доступные только для чтения или только для записи. Для этого в C# нужно опустить в свойстве блок set или get, а в Visual Basic нужно использовать ключевые слова ReadOnly и WriteOnly.

Если свойство определяется только с блоком get, то такое свойство будет доступно только для чтения, а если только с блоком set, то свойство будет доступно только для записи.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]