Для того чтобы предотвратить наследование класса, достаточно указать ключевое слово sealed перед определением класса. Как и следовало ожидать, класс не допускается объявлять одновременно как abstract и sealed, поскольку сам абстрактный класс реализован не полностью и опирается в этом отношении на свои производные классы, обеспечивающие полную реализацию.

Ниже приведен пример объявления класса типа sealed.

sealed class А {

// . . .

}

// Следующий класс недопустим.

class В : A { // ОШИБКА! Наследовать класс А нельзя/ /...

}

Как следует из комментариев в приведенном выше фрагменте кода, классВне может наследовать классА,потому что последний объявлен какsealed.

И еще одно замечание: ключевое словоsealedможет быть также использовано в виртуальных методах для предотвращения их дальнейшего переопределения. Допустим, что имеется базовый классВи производный классD.Метод, объявленный в классеВкакvirtual,может быть объявлен в классеDкакsealed.Благодаря этому в любом классе, наследующем от класса % предотвращается переопределение данного метода. Подобная ситуация демонстрируется в приведенном ниже фрагменте кода,class В {

public virtual void MyMethodO { /* ... */ }

}

class D : В {

// Здесь герметизируется метод MyMethodO и // предотвращается его дальнейшее переопределение, sealed public override void MyMethodO { /* ••• */ }

}

class X : D {

// Ошибка! Метод MyMethodO герметизирован! public override void MyMethodO { /* ••• */ }

}

МетодMyMethod() герметизирован в классеD,и поэтому не может быть переопределен в классе X.

Класс object

В C# предусмотрен специальный классobject,который неявно считается базовым классом для всех остальных классов и типов, включая и типы значений. Иными словами, все остальные типы являются производными отobj ect.Это, в частности, означает, что переменная ссылочного типаobjectможет ссылаться на объект любого другого типа. Кроме того, переменная типаobjectможет ссылаться на любой массив, поскольку в C# массивы реализуются как объекты. Формально имяobjectсчитается в C# еще одним обозначением классаSystem. Object,входящего в библиотеку классов для среды .NET Framework.

В классеobj ectопределяются методы, приведенные в табл. 11.1. Это означает, что они доступны для каждого объекта.

Перейти на страницу:

Похожие книги