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

7.4.1Базовые типы

Для поиска членов считается, что у типа T есть следующие базовые типы:

  • Если T имеет тип object, то у него нет базового типа.

  • Если T имеет тип_перечисления, то базовыми классами T являются типы классов System.Enum, System.ValueType и object.

  • Если T имеет тип_структуры, то базовыми классами T являются типы классов System.ValueType и object.

  • Если T имеет тип_класса, то базовыми классами T являются базовые классы T, включая тип класса object.

  • Если T имеет тип_интерфейса, то базовыми классами T являются базовые интерфейсы T и тип класса object.

  • Если T имеет тип_массива, то базовыми классами T являются типы классов System.Array и object.

  • Если T имеет тип_делегата, то базовыми классами T являются типы классов System.Delegate и object.

7.5Функции-члены

Функции-члены — это члены, содержащие исполняемые операторы. Функции-члены всегда являются членами типов и не могут быть членами пространств имен. В C# определены следующие категории функций-членов:

  • Методы

  • Свойства

  • События

  • Индексаторы

  • Пользовательские операторы

  • Конструкторы экземпляров

  • Статические конструкторы

  • Деструкторы

За исключением деструкторов и статических конструкторов (которые нельзя вызывать явно) операторы в функциях-членах выполняются при вызовах функции-члена. Фактический синтаксис вызова функции-члена зависит от конкретной категории функции-члена.

Список аргументов (§7.5.1) для функции-члена содержит фактические значения или ссылки на переменные для параметров функции-члена.

Вызовы универсальных методов могут использовать выводы типа для определения набора типов аргументов для выполнения метода. Этот процесс описывается в разделе §7.5.2.

При вызове методов, индексаторов, операторов и конструкторов экземпляров выполняется разрешение перегрузки с целью определить, какой набор кандидатов функций-членов будет вызываться. Этот процесс описывается в разделе §7.5.3.

После определения конкретной функции-члена во время привязки (возможно, в процессе разрешения перегрузки), фактический процесс вызова функции-члена во время выполнения описывается в разделе §7.5.4.

В следующей таблице приводится сводка по операциям, которые выполняются в конструкциях с шестью категориями функций-членов, допускающих явный вызов. В таблице e, x, y и value обозначают выражения с типом переменной или значения, T означает выражение типа, F — это простое имя метода, а P — это простое имя свойства.

Конструкция

Пример

Описание

Вызов метода

F(x, y)

Для выбора наиболее подходящего метода F в содержащем классе или структуре используется разрешение перегрузки. Метод вызывается со списком аргументов (x, y). Если метод не относится к типу static, то выражением экземпляра является this.

T.F(x, y)

Для выбора наиболее подходящего метода F в классе или структуре T используется разрешение перегрузки. Если метод не относится к типу static, возникает ошибка времени привязки. Метод вызывается со списком аргументов (x, y).

e.F(x, y)

Для выбора наиболее подходящего метода F в классе, структуре или интерфейсе, передаваемом в типе e используется разрешение перегрузки. Если метод относится к типу static, возникает ошибка времени привязки. Метод вызывается с выражением экземпляра e и со списком аргументов (x, y).

Доступ к свойству

P

В содержащем классе или структуре вызывается метод доступа get свойства P. Если свойство P доступно только для записи, то возникает ошибка времени компиляции. Если свойство не относится к типу static, то выражением экземпляра является this.

P = value

В содержащем классе или структуре вызывается метод доступа set свойства P со списком аргументов (value). Если свойство P доступно только для чтения, то возникает ошибка времени компиляции. Если свойство не относится к типу static, то выражением экземпляра является this.

T.P

В классе или структуре T вызывается метод доступа get свойства P. Если свойство P не относится к типу static или доступно только для записи, то возникает ошибка времени компиляции.

T.P = value

В классе или структуре T вызывается метод доступа set свойства P со списком аргументов (value). Если свойство P не относится к типу static или доступно только для чтения, то возникает ошибка времени компиляции.

e.P

В классе, структуре или интерфейсе, передаваемом по типу e, вызывается метод доступа get свойства P с выражением экземпляра e. Если свойство P относится к типу static или доступно только для записи, то возникает ошибка времени привязки.

e.P = value

В классе, структуре или интерфейсе, передаваемом по типу e, вызывается метод доступа set свойства P с выражением экземпляра e и списком аргументов (value). Ошибка времени привязки возникает, если P имеет тип static или если P доступно только для чтения.

Доступ к событию

E += value

В содержащем классе или структуре вызывается метод доступа add события E. Если событие E не относится к типу static, то выражением экземпляра является this.

E -= value

В содержащем классе или структуре вызывается метод доступа remove события E. Если событие E не относится к типу static, то выражением экземпляра является this.

T.E += value

В классе или структуре T вызывается метод доступа add события E. Если событие E не относится к типу static, возникает ошибка времени привязки.

T.E -= value

В классе или структуре T вызывается метод доступа remove события E. Ошибка времени привязки возникает, если E не является статическим.

e.E += value

В классе, структуре или интерфейсе, передаваемом в типе e, вызывается метод доступа add события E с выражением экземпляра e. Если событие E не относится к типу static, возникает ошибка времени привязки.

e.E -= value

В классе, структуре или интерфейсе, передаваемом в типе e, вызывается метод доступа remove события E с выражением экземпляра e. Если событие E не относится к типу static, возникает ошибка времени привязки.

Доступ к индексатору

e[x, y]

Разрешение перегрузки применяется для выбора лучшего индексатора в классе, структуре или интерфейсе, предоставленном типом e. Доступ get индексатора вызывается выражением экземпляра e и списком аргументов (x, y). Если индексатор доступен только на запись, то возникает ошибка времени привязки.

e[x, y] = value

Для выбора наиболее подходящего индексатора в классе, структуре или интерфейсе, передаваемом в типе e, используется разрешение перегрузки. Вызывается метод доступа set индексатора с выражением экземпляра e и со списком аргументов (x, y, value). Если индексатор доступен только на чтение, то возникает ошибка времени привязки.

Вызов оператора

-x

Для выбора наиболее подходящего унарного оператора в классе или структуре, передаваемой в типе x, используется разрешение перегрузки. Выбранный оператор вызывается со списком аргументов (x).

x + y

Для выбора наиболее подходящего бинарного оператора в классах или структурах, передаваемых в типах x и y, используется разрешение перегрузки. Выбранный оператор вызывается со списком аргументов (x, y).

Вызов конструктора экземпляра

new T(x, y)

Для выбора наиболее подходящего конструктора экземпляра в классе или структуре T используется разрешение перегрузки. Конструктор экземпляра вызывается со списком аргументов (x, y).

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