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

10.6.10Тело метода

Тело_метода содержит блок или точку с запятой.

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

В теле метода, который имеет тип возвращаемого значения void, не допускается использование операторов return (§8.9.4) для задания выражений. Если выполнение метода, возвращающего void, завершается нормально (управление передается из конечной точки тела метода), этот метод просто возвращается вызвавшему его объекту.

Если метод возвращает значение, тип которого отличается от void, каждый оператор return в теле этого метода должен задавать выражение, неявно преобразуемое к типу возвращаемого значения. Конечная точка тела метода, возвращающего значение, должна быть недостижима. Другими словами, в методе, возвращающем значение, не допускается передача управления из конечной точки тела метода.

В примере

class A { public int F() {} // Error, return value required

public int G() { return 1; }

public int H(bool b) { if (b) { return 1; } else { return 0; } } }

метод F, возвращающий значение, порождает ошибку времени компиляции, поскольку в этом случае управление может быть передано из конечной точки тела метода. Методы G и H являются правильными, поскольку в них все возможные ветви выполнения заканчиваются оператором return, задающим возвращаемое значение.

10.6.11Перегрузка метода

Правила разрешения перегрузки метода описываются в разделе §7.5.2.

10.7Свойства

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

Свойства объявляются с помощью объявлений_свойств:

объявление_свойства: атрибутынеобязательно модификаторы_свойствнеобязательно тип имя_члена { объявления_методов_доступа }

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

модификатор_свойства: new public protected internal private static virtual sealed override abstract extern

имя_элемента: идентификатор тип_интерфейса . идентификатор

Объявление_свойства может включать набор атрибутов (§17), допустимое сочетание любых из четырех модификаторов доступа (§10.3.5), а также модификаторы new (§10.3.4), static (§10.6.2), virtual (§10.6.3), override (§10.6.4), sealed (§10.6.5), abstract (§10.6.6) и extern (§10.6.7).

В отношении использования сочетаний модификаторов объявления свойств подчиняются тем же правилам, что и объявления методов (§10.6).

Тип свойства задает представленный в объявлении тип свойства. Имя_члена задает имя свойства. Если в свойстве не содержится явная реализация члена интерфейса, имя_члена представляет собой просто идентификатор. При явной реализации члена интерфейса (§13.4.1) имя_члена состоит из типа_интерфейса, точки «.» и идентификатора (в указанной последовательности).

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

Объявления_методов_доступа заключаются в фигурные скобки «{» и «}» и объявляют методы доступа (§10.7.2) свойства. Методы доступа задают исполняемые операторы, связанные с чтением или записью свойства.

Несмотря на то что для обращения к свойствам и полям используется одинаковый синтаксис, свойство не классифицируется как переменная. Поэтому невозможно передать свойство как аргумент ref или out.

Если объявление свойства включает модификатор extern, свойство называется внешним свойством. Поскольку объявление внешнего свойства не предоставляет фактической реализации, каждое из его объявлений_методов_доступа состоит из точки с запятой.

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