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

10.2.8Привязка имен

Несмотря на то, что каждая часть расширяемого типа должна быть объявлена в одном пространстве имен, части обычно прописываются в рамках различных объявлений пространств имен. Поэтому для каждой части могут присутствовать различные директивы using (§9.4). При интерпретации простых имен (§7.5.2) в рамках одной части учитываются только директивы using объявлениий пространства имен, заключающие данную часть. Это может привести к наличию одинаковых идентификаторов с различными значениями в различных частях.

namespace N { using List = System.Collections.ArrayList;

partial class A { List x; // x has type System.Collections.ArrayList } }

namespace N { using List = Widgets.LinkedList;

partial class A { List y; // y has type Widgets.LinkedList } }

10.3Члены класса

Члены класса состоят из членов, представленных его объявлениями_членов_класса и членами, унаследованными от прямого базового класса.

объявления_членов_класса: объявление_члена_класса объявления_членов_класса объявление_члена_класса

объявление_члена_класса: объявление_константы объявление_поля объявление_метода объявление_свойства объявление_события объявление_индексатора объявление_оператора объявление_конструктора объявление_деструктора объявление_статического_конструктора объявление_типа

Члены типа класса разделены на следующие категории.

  • Константы, представляющие постоянные значения, связанные с классом (§10.4).

  • Поля, являющиеся переменными класса (§10.5).

  • Методы, реализующие вычисления и действия, которые могут быть выполнены классом (§10.6).

  • Свойства, определяющие именованные характеристики и действия, связанные с чтением и записью данных характеристик (§10.7).

  • События, определяющие уведомления, которые могут быть сгенерированы классом (§10.8).

  • Индексаторы, которые обеспечивают индексацию экземпляров класса аналогично (синтаксически) индексации массивов (§10.9).

  • Операторы, определяющие операторы выражений, которые могут быть применены к экземплярам класса (§10.10).

  • Конструкторы экземпляров, реализующие действия, требуемые для инициализации экземпляров класса (§10.11)

  • Деструкторы, реализующие действия, выполняемые до отмены экземпляров класса без возможности восстановления (§10.13).

  • Статические конструкторы, реализующие действия, требуемые для инициализации самого класса (§10.12)

  • Типы, представляющие локальные типы класса (§10.3.8).

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

Объявление_класса создает новую область объявления (§3.3), а объявления_члена_класса, непосредственно содержащиеся в объявлении_класса, представляют новые члены в данной области объявления. К объявлениям_члена_класса применяются следующие правила.

  • Конструкторы экземпляров, деструкторы и статические конструкторы должны иметь одинаковые имена с именами непосредственного заключающего класса. Все другие члены должны иметь имена, отличающиеся от имен непосредственного заключающего класса.

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

  • Имя метода должно отличаться от всех других объявленных в том же классе имен, не относящихся к методам. Кроме того, сигнатура (§3.6) метода должна отличаться от сигнатур всех других методов, объявленных в том же классе, а два метода, объявленных в одном классе, не могут иметь сигнатуры, отличающиеся только словами ref и out.

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

  • Сигнатура индексатора должна отличаться от сигнатур всех других индексаторов, объявленных в этом же классе.

  • Сигнатура оператора должна отличаться от сигнатур всех других операторов, объявленных в том же классе.

Унаследованные члены типа класса (§10.3.3) не являются частью области объявления класса. Поэтому производный класс может объявлять член с именем или сигнатурой, совпадающей с именем унаследованного члена (что приводит к скрытию унаследованного члена).

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