ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: ironMan
9. августа 2011 03:30

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



using System;

sealed class MyPoint
{
public MyPoint(int x, int y)
{
this.x = x;
this.у = у;
}

private int pX;
public int x
{
get
{
return this.pX;
}
set
{
this.pX = value;
}
}

private int pY;
public int y
{
get
{
return this.pY;
}
set
{
this.pY = value;
}
}

}

class SealedApp
{
public static void Main()
{
MyPoint pt = new MyPoint(6,16) ;
Console-WriteLine("x = {0}, у = {1}", pt.x, pt.y);
}
}



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

( отрывок из книги В. В. Лабор "Си Шарп: Создание приложений для Windows" )

Похожие записи


Как создать сборку в памяти и использовать ее классы отражением (reflection) на C# ?
Продолжаю тему загрузки плагинов из БД, начатую в предыдущих моих постах. Недавно на работе пришлось написать небольшой движок запускающий плагины на C#. Плагины хранились в виде classlib сборки (DLL). Они хранились в поле varchar(max) в таблице MS SQL Server. Соответственно после загрузки данных в массив байтов нужно было создать сборку в памяти, потом создать ...

Вложенные классы в C#
Иногда некоторый класс играет чисто вспомогательную роль для другого класса и используется только внутри него. В этом случае логично описать его внутри существующего класса. Вот пример такого описания:[code:c#] using System; namespace test { class ClassA { /* Вложенный класс */ private class ClassB { public int z; } /* Переменная типа вложенного класса */ private C...

Виртуальные свойства в C#
Свойства, как и методы, могут быть перегружены в производных классах. Для свойств также могут задаваться модификаторы virtual, override или abstract. Подробно о наследовании говорилось в главе «Методы», сейчас я лишь хочу еще раз привести подробный пример использования механизма виртуализации с применением свойств: [code:c#] using System; enum COLORS { RE...

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий