Partial 7 страница
interface IControl class Control: IControl class MyControl: Control, IControl тот факт, что в классе Control метод IControl.Paint сопоставлен методу Control.IControl.Paint, не влияет на повторную реализацию в классе MyControl, где метод IControl.Paint сопоставлен методу MyControl.Paint. В процедуре сопоставления повторно реализованных интерфейсов участвуют унаследованные объявления открытых членов и унаследованные явные объявления членов интерфейса. Например: interface IMethods class Base: IMethods class Derived: Base, IMethods В этом примере реализация интерфейса IMethods в классе Derived сопоставляет методы этого интерфейса методам Derived.F, Base.IMethods.G, Derived.IMethods.H и Base.I. При реализации интерфейса в классе также неявно реализуются все базовые интерфейсы этого интерфейса. Аналогичным образом повторная реализация интерфейса неявно является повторной реализацией всех базовых интерфейсов этого интерфейса. Пример: interface IBase interface IDerived: IBase class C: IDerived void IDerived.G() {...} class D: C, IDerived public void G() {...} Здесь в повторной реализации интерфейса IDerived также повторно реализуется интерфейс IBase, в результате чего метод IBase.F сопоставлен методу D.F. 13.4.7 Абстрактные классы и интерфейсы В абстрактных классах, как и в классах, не являющихся абстрактными, необходимо указать реализацию всех членов интерфейсов, включенных в список их базовых классов. Тем не менее, в абстрактном классе разрешается сопоставлять методы интерфейса абстрактным методам. Пример: interface IMethods abstract class C: IMethods В этом примере реализация интерфейса IMethods сопоставляет методы F и G абстрактным методам, которые должны быть переопределены в производных от C классах, не являющихся абстрактными. Обратите внимание, что явные реализации члена интерфейса не могут быть абстрактными, однако в таких реализациях можно вызывать абстрактные методы. Например: interface IMethods abstract class C: IMethods void IMethods.G() { GG(); } protected abstract void FF(); protected abstract void GG(); В этом примере в производных от C классах, не являющихся абстрактными, необходимо переопределить методы FF и GG, что обеспечит фактическую реализацию интерфейса IMethods. 14. Перечисляемые типы; Перечисляемый тип является особым типом значения (§4.1), который объявляет набор именованных констант. Пример: enum Color Здесь объявляется перечисляемый тип с именем Color, содержащий члены Red, Green и Blue. 14.1 Объявления перечислений Объявление перечисления объявляет новый перечисляемый тип. Объявление перечисления начинается с зарезервированного слова enum и содержит определение имени, доступности, базового типа и членов перечисления. объявление_перечисления: база_перечисления: тело_перечисления: Каждый тип перечисления имеет соответствующий целый тип, называемый базовым типом; типа перечисления. Этот базовый тип должен иметь возможность представлять все значения перечислителя, определенные в перечислении. Объявление перечисления может явно объявлять базовый тип byte, sbyte, short, ushort, int, uint, long или ulong. Обратите внимание, что тип char не может использоваться в качестве базового типа. Объявление перечисления, которое не содержит явное объявления базового типа, имеет базовый тип int. Например: enum Color: long Здесь объявляется перечисление с базовым типом long. Разработчик может выбрать использование базового типа long, как это показано в примере, чтобы иметь возможность использования значений, которые находятся в диапазоне типа long, но не входят в диапазон типа int, или чтобы сохранить этот выбор на будущее. 14.2 Модификаторы перечисления Объявление_перечисления; может, при необходимости, включать последовательность модификаторов перечисления: модификаторы_перечисления: модификатор_перечисления: Возникает ошибка времени компиляции, если один и тот же модификатор встречается несколько раз в объявлении перечисления. Модификаторы объявления перечисления имеют тот же смысл, что и модификаторы объявления класса (§10.1.1). Однако обратите внимание, что в объявлении перечисления не разрешается использовать модификаторы abstract и sealed. Перечисления не могут быть абстрактными и не допускают производные типы. 14.3 Члены перечисления; Тело объявления перечисляемого типа определяет нуль или более членов перечисления, которые являются именованными константами перечисляемого типа. Два члена не могут иметь одинаковое имя. объявления_членов_перечисления: объявление_элемента_перечисления: Каждый член перечисления имеет связанное с ним постоянное значение. Тип этого значения является базовым типом для содержащего его перечисления. Постоянное значение для каждого члена перечисления должно находиться в диапазоне базового типа для перечисления. Например: enum Color: uint приводит к ошибке времени компиляции, так как значения констант -1, -2 и -3 не находятся в диапазоне базового целого типа uint.
|