Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

10.3.9.1Имена членов, зарезервированные для свойств

Для свойства P (§10.7) типа T зарезервированы следующие подписи:

T get_P(); void set_P(T value);

Зарезервированы обе сигнатуры, даже если свойство доступно только для чтения или только для записи.

Пример.

using System;

class A { public int P { get { return 123; } } }

class B: A { new public int get_P() { return 456; }

new public void set_P(int value) { } }

class Test { static void Main() { B b = new B(); A a = b; Console.WriteLine(a.P); Console.WriteLine(b.P); Console.WriteLine(b.get_P()); } }

класс A определяет свойство P только для чтения, резервируя тем самым подписи для методов get_P и set_P. Класс B является производным от A, и скрывает обе эти зарезервированные сигнатуры. Далее показан вывод для вышеуказанного примера.

123 123 456

10.3.9.2Имена членов, зарезервированные для событий

Для события E (§10.8) типа делегата T зарезервированы следующие подписи:

void add_E(T handler); void remove_E(T handler);

10.3.9.3Имена членов, зарезервированные для индексаторов

Для индексатора (§10.9) типа T со списком параметров L зарезервированы следующие подписи:

T get_Item(L); void set_Item(L, T value);

Зарезервированы обе сигнатуры, даже если индексатор доступен только для чтения или только для записи.

Кроме того, имя члена Item является зарезервированным.

10.3.9.4Имена членов, зарезервированные для деструкторов

Для класса, содержащего деструктор (§10.13), зарезервирована следующая сигнатура:

void Finalize();

10.4Константы

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

объявление_константы: атрибутынеоб модификаторы_константнеоб const тип деклараторы_констант ;

модификаторы_константы: модификатор_константы модификаторы_константы модификатор_константы

модификатор_константы: new public protected internal private

деклараторы_констант: декларатор_константы деклараторы_констант , декларатор_константы

объявление_константы: идентификатор = выражение_константы

Объявление_константы может включать набор атрибутов (§17), модификатор new (§10.3.4) и допустимое сочетание из четырех модификаторов доступа (§10.3.5). Атрибуты и модификаторы применяются ко всем членам, объявленным объявлением_константы. Хотя константы считаются статическими членами, объявление_константы не требует и не допускает модификатор static. Неоднократное появление одного и того же модификатора в объявлении константы является ошибкой.

Тип в объявлении_константы указывает тип членов, вводимых объявлением. За типом следует список деклараторов_констант, каждый из которых вводит новый член. Декларатор_константы состоит из идентификатора, именующего член, за которым следует лексема «=», а затем константное_выражение (§7.19), задающее значение члена.

Тип, указанный в объявлении константы, должен быть типом sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, string, перечисляемым_типом или ссылочным_типом. Каждое константное_выражение должно давать значение конечного типа или типа, который может быть неявно преобразован к конечному типу (§6.1).

Тип константы должен быть, по крайней мере, таким же доступным, как сама константа (§3.5.4).

Значение константы получается в выражении с помощью простого_имени (§7.6.2) или доступа_к_члену (§7.6.4).

Константа сама может участвовать в константном_выражении. Таким образом, константу можно использовать в любой конструкции, где требуется константное_выражение. Примеры таких конструкций включают метки case, операторы goto case, объявления членов enum, атрибуты и другие объявления констант.

Как описано в §7.19, константное_выражение является выражением, которое может быть полностью вычислено во время компиляции. Поскольку единственный способ создать отличное от null значение ссылочного_типа, отличное от string, – применить оператор new, а оператор new не допускается в константном выражении, единственным возможным значением для констант ссылочных типов, отличных от string, является null.

Если для значения константы требуется символическое имя, а тип этого значения не допускается в объявлении константы, или если значение невозможно вычислить во время компиляции посредством константного_выражения, вместо этого можно использовать поле readonly (§10.5.2).

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

class A { public const double X = 1.0, Y = 2.0, Z = 3.0; }

эквивалентно

class A { public const double X = 1.0; public const double Y = 2.0; public const double Z = 3.0; }

Константы могут зависеть от других констант внутри одной программы, если только зависимости не являются циклическими. Компилятор автоматически располагает вычисления объявлений констант в соответствующем порядке. Пример.

class A { public const int X = B.Z + 1; public const int Y = 10; }

class B { public const int Z = A.Y + 1; }

В этом примере компилятор сначала вычисляет A.Y, затем B.Z и наконец A.X, создавая значения 10, 11 и 12. Объявления констант могут зависеть от констант из других программ, но такие зависимости возможны только в одном направлении. В вышеприведенном примере: если бы A и B были объявлены в отдельных программах, для A.X было бы возможно зависеть от B.Z, но тогда B.Z не мог бы одновременно зависеть от A.Y.

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