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

10.5.5.2Инициализация поля экземпляра

Инициализаторы переменных полей экземпляров класса соответствуют последовательности присваиваний, выполняемых непосредственно при входе в любой из конструкторов экземпляров (§10.11.1) этого класса. Инициализаторы переменных выполняются в том текстовом порядке, в каком они представлены в объявлении класса. Создание экземпляра класса и процесс инициализации описаны далее в разделе §10.11.

Инициализатор переменной для поля экземпляра не может обращаться к создаваемому экземпляру. Таким образом, обращение к this в инициализаторе переменной, как и обращение инициализатора переменной к любому члену экземпляра по простому_имени, является ошибкой времени компиляции. Пример.

class A { int x = 1; int y = x + 1; // Error, reference to instance member of this }

инициализатор переменной для y приводит к ошибке времени компиляции, так как ссылается на член создаваемого экземпляра.

10.6Методы

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

объявление_метода: заголовок_метода тело_метода

заголовок_метода: атрибутынеобязательно модификаторы_методанеобязательно partialнеобязательно тип_возвращаемого_значения имя_элемента список_параметров_типанеобязательно ( список_формальных_параметровнеобязательно ) предложения_ограничений_параметров_типанеобязательно

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

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

возвращаемый_тип: тип void

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

тело_метода: блок ;

Объявление_метода может включать набор атрибутов (§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.3.5);

  • объявление не включает один и тот же модификатор несколько раз;

  • объявление включает не более одного из следующих модификаторов: static, virtual и override;

  • объявление включает не более одного из следующих модификаторов: new и override;

  • если объявление включает модификатор abstract, то объявление не включает ни один из следующих модификаторов: static, virtual, sealed и extern;

  • если объявление включает модификатор private, то объявление не включает ни один из следующих модификаторов: virtual, override и abstract;

  • если объявление включает модификатор sealed, то объявление также включает модификатор override;

  • если объявление включает модификатор partial, то оно не включает ни один из следующих модификаторов: new, public, protected, internal, private, virtual, sealed, override, abstract и extern.

Тип_возвращаемого_значения в объявлении метода указывает тип значения, вычисляемого и возвращаемого методом. Если метод не возвращает значение, типом_возвращаемого_значения является void. Если объявление включает модификатор partial, типом возвращаемого значения должен быть void.

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

Необязательный список_параметров_типа указывает параметры типа метода (см. §10.1.3). Если список_параметров_типа указан, метод является универсальным методом. Если у метода есть модификатор extern, список_параметров_типа указывать нельзя.

Необязательный список_формальных_параметров указывает параметры метода (см. §10.6.1).

Необязательные предложения_ограничений_параметров_типов указывают ограничения по отдельным параметрам типов (§10.1.5) и могут быть указаны только если предоставлен также список_параметров_типов, а у метода нет модификатора override.

Тип_возвращаемого_значения и каждый из типов в списке_формальных_параметров метода должен быть, по крайней мере, так же доступным, как сам метод (см. §3.5.4).

Для методов abstract и extern тело_метода состоит просто из точки с запятой. Для методов partial тело_метода может состоять либо из точки с запятой, либо из блока. Для всех других методов тело_метода состоит из блока, в котором указаны операторы для исполнения при вызове метода.

Имя, список параметров типа и список формальных параметров метода определяют сигнатуру (§3.6) метода. А именно, сигнатура метода состоит из его имени, числа параметров типов и числа, модификаторов и типов его формальных параметров. Для этих целей каждый параметр типа метода, встречающийся в типе формального параметра, идентифицируется не по своему имени, а по своему порядковому номеру в списке аргументов типа метода. Тип возвращаемого значения не является частью сигнатуры метода, как и имена параметров типов и формальных параметров.

Имя метода должно отличаться от имен всех других не методов, объявленных в этом же классе. Кроме того, подпись метода должна отличаться от подписей всех других методов, объявленных в этом же классе, а два метода, объявленные в одном и том же классе, не могут иметь подписи, отличающиеся только параметрами ref и out.

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

Все формальные параметры и параметры типов должны иметь разные имена.

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