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

9.7.1Уникальность псевдонимов

В каждой единице компиляции и теле пространства имен имеется отдельная область объявлений для псевдонимов extern и using. Так, хотя имя псевдонима extern или псевдонима using должно быть уникальным внутри набора псевдонимов extern и псевдонимов using, объявленных в непосредственно содержащей единице компиляции или теле пространства имен, псевдоним может иметь то же имя, что и тип или пространство имен, если он используется только с квалификатором.

В этом примере

namespace N { public class A {}

public class B {} }

namespace N { using A = System.IO;

class X { A.Stream s1; // Error, A is ambiguous

A::Stream s2; // Ok } }

у имени A два возможных значения в теле второго пространства имен, так как и класс A, и псевдоним A находятся в области. Поэтому использование A в уточненном имени A.Stream неоднозначно и приводит к ошибке времени компиляции. Однако использование A с квалификатором :: не является ошибкой, так как поиск A ведется только как псевдонима пространства имен.

10.Классы

Класс — это структура данных, которая может содержать члены данных (константы и поля), члены функций (методы, свойства, события, индексаторы, операторы, конструкторы экземпляров, деструкторы и статические конструкторы) и вложенные типы. Типы классов поддерживают наследование — механизм, в котором производный класс может расширять и сужать базовый класс.

10.1Объявления классов

Объявлением_класса является объявление_типа (§9.6), которое объявляет новый класс.

объявление_класса: атрибутынеобязательно модификаторы_классанеобязательно partialнеобязательно class идентификатор список_параметров_типанеобязательно база_классанеобязательно предложения_ограничений_параметров_типанеобязательно тело_класса ;необязательно

Объявление_класса состоит из необязательного набора атрибутов (§17), затем следует необязательный набор модификаторов_класса (§10.1.1), необязательный модификатор partial, ключевое слово class и идентификатор, именующий класс, затем следует необязательный список_параметров_типа (§10.1.3), необязательная спецификация базы_класса (§10.1.4), необязательный набор предложений_ограничений_параметров_типа (§10.1.5), тело_класса (§10.1.6) и необязательная точка с запятой.

Объявление класса не предоставляет предложения_ограничений_параметров_типа, если не предоставляется список_параметров_типа.

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

10.1.1Модификаторы классов

Объявление_класса может включать последовательность модификаторов класса.

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

модификатор_класса: new public protected internal private abstract sealed static

Появление в объявлении класса одного и того же модификатора несколько раз является ошибкой времени компилирования.

Модификатор new допускается во вложенных классах. Он определяет скрытие классом унаследованного члена с тем же именем согласно описанию в разделе §10.3.4. Появление модификатора new в объявлении класса, не являющимся объявлением вложенного класса, является ошибкой времени компилирования.

Модификаторы public, protected, internal и private управляют доступностью класса. В зависимости от контекста, в котором возникает объявление класса, некоторые из данных модификаторов могут быть запрещены (§3.5.1).

Описание модификаторов abstract, sealed и static представлено в последующих разделах.

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