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

10.3.4Модификатор new

Для объявления_члена_класса допускается объявление члена с таким же именем или сигнатурой, что и у унаследованного члена. При этом член производного класса скрывает член базового класса. Скрытие унаследованного члена не считается ошибкой, но приводит к отображению компилятором предупреждения. Чтобы эти предупреждения не появлялись, объявление члена производного класса может включать модификатор new для указания того, что производный член предназначен для скрытия базового члена. Эта тема более подробно рассматривается в §3.7.1.2.

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

10.3.5Модификаторы доступа

Объявление_класса_доступа может иметь любой из пяти возможных видов объявленной доступности (§3.5.1): public, protected internal, protected, internal или private. Исключая комбинацию protected internal, указание более одного модификатора доступа является ошибкой времени компилирования. Если объявление_члена_класса не включает какие-либо модификаторы доступа, предполагается использование модификатора private.

10.3.6Составные типы

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

10.3.7Статические члены и члены экземпляра

Члены класса являются либо статическими членами, либо членами экземпляра. В общем случае считается, что статические члены принадлежат к типам классов, а члены экземпляра принадлежат к объектам (экземплярам типов классов).

Когда объявление поля, метода, свойства, события, оператора или конструктора содержит модификатор static, оно объявляет статический член. Кроме того, объявление константы или типа неявно объявляет статический член. Статические члены имеют следующие особенности.

  • Если на статический член M ссылается в доступе_члена (§7.6.4) формы E.M, E должен обозначать тип-контейнера M. Обозначение E экземпляром является ошибкой времени компилирования.

  • Статическое поле идентифицирует только одно место хранения для всех экземпляров данного закрытого типа класса. Независимо от количества создаваемых экземпляров данного закрытого типа класса всегда существует только одна копия статического поля.

  • Статическая функция-член (метод, свойство, событие, оператор или конструктор) не выполняет операций с конкретным экземпляром. При использовании зарезервированного слова this в подобной функции-члене возникает ошибка компиляции.

Если объявление поля, метода, свойства, события, индексатора, конструктора или деструктора не включает модификатор static, оно объявляет член экземпляра (член экземпляра иногда называется нестатическим членом). Члены экземпляра имеют следующие особенности.

  • Когда на член экземпляра M ссылаются в доступе_члена (§7.6.4) формы E.M, E должен обозначать экземпляр тип-контейнера M. Обозначение E типом является ошибкой времени привязки.

  • Каждый экземпляр класса содержит отдельный набор всех полей экземпляра класса.

  • Член функции экземпляра (метод, свойство, индексатор, конструктор экземпляра или деструктор) работает на заданном экземпляре класса, и данный экземпляр может быть вызван в качестве this (§7.6.7).

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

class Test { int x; static int y;

void F() { x = 1; // Ok, same as this.x = 1 y = 1; // Ok, same as Test.y = 1 }

static void G() { x = 1; // Error, cannot access this.x y = 1; // Ok, same as Test.y = 1 }

static void Main() { Test t = new Test(); t.x = 1; // Ok t.y = 1; // Error, cannot access static member through instance Test.x = 1; // Error, cannot access instance member through type Test.y = 1; // Ok } }

Метод F указывает, что в члене функции экземпляра простое_имя (§7.6.2) может использоваться для доступа к членам экземпляров и статическим членам. Метод G указывает, что вызов члена экземпляра через простое_имя в статическом члене функции является ошибкой времени компилирования. Метод Main указывает, что в доступе_члена (§7.6.4) члены экземпляра должны вызываться через экземпляры, а статические члены должны вызываться через типы.

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