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

10.2.3Параметры и ограничения типа

Если универсальный тип объявлен в нескольких частях, каждая часть должна формулировать параметры типа. Все части должны иметь одинаковое количество параметров типа и одинаковые имена для каждого параметра типа (по порядку).

Если объявление разделяемого универсального типа содержит ограничения (предложения where), ограничения должны быть согласованы со всеми другими частями, включающими ограничения. В частности, каждая часть, содержащая ограничения, должна иметь ограничения для того же набора параметров типа, а для каждого параметра типа наборы первичных, вторичных ограничений и ограничений конструктора должны быть эквивалентны. Два набора ограничений эквивалентны, если они содержат одинаковые члены. Если ни одна часть разделяемого универсального типа не указывает ограничения параметра типа, параметры типа считаются неограниченными.

Например:

partial class Dictionary<K,V> where K: IComparable<K> where V: IKeyProvider<K>, IPersistable { ... }

partial class Dictionary<K,V> where V: IPersistable, IKeyProvider<K> where K: IComparable<K> { ... }

partial class Dictionary<K,V> { ... }

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

10.2.4Базовый класс

Если объявление разделяемого класса содержит спецификацию базового класса, требуется согласование со всеми остальными частями, включающими спецификацию базового класса. Если ни одна часть разделяемого класса не включает спецификацию базового класса, базовым классом становится System.Object (§10.1.4.1).

10.2.5Базовые интерфейсы

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

В следующем примере:

partial class C: IA, IB {...}

partial class C: IC {...}

partial class C: IA, IB {...}

набором базовых интерфейсов для класса C является IA, IB и IC.

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

partial class X { int IComparable.CompareTo(object o) {...} }

partial class X: IComparable { ... }

10.2.6Члены

Исключая разделяемые методы (§10.2.7), набором членов типа, объявленного в нескольких частях, является просто объединение членов, объявленных в каждой части. Тела всех частей объявления типа совместно используют одну область объявления (§3.3), а область каждого члена (§3.7) расширяется на тела всех частей. Домен доступности любого члена всегда содержит все части вмещающего типа; член private, объявленный в одной части, свободно доступен из другой части. Объявление одного члена в нескольких частях типа является ошибкой времени компилирования, если данный член не является типом с модификатором partial.

partial class A { int x; // Error, cannot declare x more than once

partial class Inner // Ok, Inner is a partial type { int y; } }

partial class A { int x; // Error, cannot declare x more than once

partial class Inner // Ok, Inner is a partial type { int z; } }

Несмотря на то, что порядок членов в рамках типа несущественен для кода C#, он может быть важным при согласовании с другими языками и средами. В таких случаях порядок членов в рамках типа, объявленного в нескольких частях, не определен.

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