Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 69

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 63 64 65 66 67 68 < 69 > 70 71 72 73 74 75 .. 320 >> Следующая

l-get.MfaaSU». I I I 9JJBB
assembly Employees as "Employees"
Рис. З.8. Свойства отображаются в скрытые методы get_ и set_
в
Свойства только для чтения, только для записи и статические
Наш рассказ о свойствах классов С# будет неполон, если мы не упомянем еще о некоторых связанных с ними моментах. Как мы помним, наше свойство EmpID было создано как свойство, доступное и для чтения, и для записи. Однако при со-
Средства инкапсуляции в .. 155
здании пользовательских свойств класса часто возникает необходимость создать свойство, которое будет доступно только для чтения. Делается это очень просто: необходимо в определении свойства пропустить блок set. В результате свойство станет доступным только для чтения:
public cl ass Employee
!
// Будем считать, что исходное значение этой переменной присваивается с помощь» // конструктора класса private string ssn;
// А вот так выглядит свойство только для чтения public string SSN ( get { return ssn: } }
}
C# также поддерживает статические свойства. Как мы помним, статические переменные предназначены для хранения информации науровне всего класса, а не его отдельных объектов. Если у нас объявлены статические данные (то есть те же переменные), то обращаться к ним и устанавливать значения должны статические свойства. Предположим, что в нашем классе Employee мы собираемся, помимо всего прочего, хранить еще и информацию об имени организации, в которой работают все сотрудники — объекты класса Employee. Для этого будет использована специальная статическая переменная. Соответствующее статическое свойство для работы с этой переменной может выглядеть так:
// Со стати^есикн* данными должны работать статические свойства
public class Employee
{
private static string CompName: // Статическая переменная public static string Company // Статическое свойство
{
get { return CompName; ) set { CompName = value: )
І
}
Обращение к статическим свойствам производится так же, как и к статическим
методам;
// Задаем и получаем иЦюркзиию об имени компании
public static int Main(string[] args)
{
Employee.Company = "lntertech, Inc";
Console.WriteLine( "These folks work at {D}". Employee.Company): ) "'
Статические конструкторы
Само словосочетание «статический конструктор» звучит несколько странно — ведь мы знаем, что конструкторы нужны для создания объектов, а все, что имеет определение «статический»., работает на уровне классов, а не отдельных объектов. Однако в С# такие конструкторы вполне имеют право на существование. Единствен -ное их назначение — присваивать исходные значения статическим переменным.
156 Глава 3 • С* и объектно-ориентированное программирование
С точки зрения синтаксиса статические конструкторы — это достаточно причудливые образования. Например, для них нельзя использовать модификаторы области видимости, однако слово static должно присутствовать обязательно. Вот пример ситуации, в которой нам может пригодиться статический конструктор: предположим, что мы желаем, чтобы статической переменной CompName всегда при создании присваивалось значение їгсегї&пії. Inc. Мы можем сделать это следующим образом:
// Статические конструкторы используются для инициализации статических переменных public class Employee
private static string CompName;
static Employee' і {
CompName = "lntertech, Іпс":
}
г
Если нам потребуется использовать свойство Enipl oyee . Company, присваивать ему исходное значение не придется — статический конструктор сделает это за нас автоматически:
// Значение свойства ("lntertech. Inc") будет автоматически установлено // через статический конструктор public static Irrt Main(string[] args)
(
Console br'teUrwr These folks at {C}". Employee.Company):
}
Подводя итоги этого раздела, можно отметить, что свойства классов С# используются для тех же самых целей, что и традиционные методы доступа и изменения значений. Главное преимущество свойств заключается в том, что пользователь может работать через них со внутренними используя единственное имя
(вместо двух разных имен методов).
Псевдоинкапсуляция: создание полей «только для чтения»
Помимо свойств только для чтения, в С# также предусмотрены поля, значения которых изменять нельзя. Как мы помним, поля (fields) — это открытые данные класса (переменные, объявленные с ключевым словом public). Обычно применение полей в рабочем приложении — не самая лучшая идея, поскольку поля беззащитны — им легко присвоить значение и тем самым испортить внутреннее состояние объекта. Однако в С# предусмотрена возможность запретить любую возможность изменять значение поля, объявив его с ключевым словом readonly:
public class Employee
Псеадоинкапсупяция: создание полей «только для чтения» 157
// Поле только для ч;;;-і:іія (его значение устанавливается кснструкюоом). public readonly string SSNfі eld:
}
Как, наверное, вы уже догадываетесь, любая попытка изменить значение такого поля приведет к ошибке компилятора.
Статические поля «только для чтения»
Статические поля, определенные как «только для чтения», также вполне имеют право на существование. Обычно они используются в тех ситуациях, когда вы хо тите создать некоторое количество постоянных значений, связанных с определенным классом. Очень похожие задачи выполняют обычные константы, которые можно назвать родственниками статических полей только для чтения. Однако меж> ду такими полями и константами есть существенное различие: константа заменяется на свое значение уже в процессе компиляции, в то время как значения статических полей только для чтения вычисляются лишь в процессе выполнения: программы.
Предыдущая << 1 .. 63 64 65 66 67 68 < 69 > 70 71 72 73 74 75 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100