Поиск

Изолированные классы

Если вы хотите быть уверенными, что класс никогда не будет использован как базовый, при определении класса примените модификатор sealed. Единственное ограничение: абстрактный класс не может быть изолированным, так как в силу своей природы абстрактные классы предназначены для использования в качестве базовых. И еще. Хотя изолированные классы предназначены для предотвращения непреднамеренного создания производных классов, определение класса как изолированного позволяет выполнить оптимизацию периода выполнения. В частности, поскольку компилятор гарантирует отсутствие у класса любых производных классов, есть возможность преобразования виртуальных вызовов для изолированного класса в невиртуальные вызовы. Вот пример определения класса как изолированного:

using System;
sealed class MyPoint {
public HyPoint(int x, int y) {
this.x = x; this.у = у; }
private int X; public int x {
get
{
return this.X;
} set
<
this.X = value;
} }
private int Y; / public int у /
get {
return this.Y;
}
set
{
this.Y = value; } } >
class SealedApp {
public static void Main() {
MyPoint pt = new MyPoint(6,16);
Console.WriteLine("x = {0}, у = {1}", pt.x, pt.y); } }

Я использовал модификатор доступа private для внутренних членов классами Y. В результате применения модификатора protected компилятор выдаст предупреждение, так как защищенные члены видимы производным классам, а, как вам известно, у изолированных производных классов нет.

Подведем итоги

Понятие о классах и их взаимоотношений с объектами — основа идеи объектного программирования. Объектно-ориентированные функции С# — наследие C++, дополненное и улучшенное функциями .NET Framework. Разработчиков серьезно беспокоит управление ресурсами в управляемых системах вроде CLR. CLR стремится освободить программистов от нудной работы по подсчету ссылок с помощью сбора мусора на основе детерминированного завершения. Работа с наследованием в С# также отличается от таковой в C++. Хотя поддерживается лишь одиночное наследование, разработчики все же могут задействовать преимущества множественного наследования, реализуя набор интерфейсов.