Ескерім
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Абстрактное ключевое слово позволяет создавать классы и члены класса, которые являются неполными и должны быть реализованы в производном классе.
Запечатаемое ключевое слово позволяет предотвратить наследование класса или определенных членов класса, которые ранее были помечены виртуальными.
Абстрактные классы и члены класса
Классы можно объявить как абстрактные, поставив ключевое слово abstract
перед определением класса. Рассмотрим пример.
public abstract class A
{
// Class members here.
}
Создавать экземпляры абстрактного класса нельзя. Цель абстрактного класса — предоставить общее определение базового класса, который могут использовать несколько производных классов. Например, библиотека классов может определить абстрактный класс, используемый в качестве параметра для многих его функций, и требовать, чтобы программисты использовали ее для предоставления собственной реализации класса путем создания производного класса.
Абстрактные классы также могут определять абстрактные методы. Это достигается путем добавления ключевого слова abstract
до возвращаемого типа метода. Рассмотрим пример.
public abstract class A
{
public abstract void DoWork(int i);
}
Абстрактные методы не имеют реализации, поэтому за определением метода следует точка с запятой вместо обычного блока методов. Производные классы абстрактного класса должны реализовывать все абстрактные методы. Если абстрактный класс наследует виртуальный метод от базового класса, абстрактный класс может переопределить виртуальный метод абстрактным методом. Рассмотрим пример.
// compile with: -target:library
public class D
{
public virtual void DoWork(int i)
{
// Original implementation.
}
}
public abstract class E : D
{
public abstract override void DoWork(int i);
}
public class F : E
{
public override void DoWork(int i)
{
// New implementation.
}
}
virtual
Если метод объявленabstract
, он по-прежнему является виртуальным для любого класса, наследуемого от абстрактного класса. Класс, производный от класса с абстрактным методом, DoWork
не может получить доступ к исходной реализации метода. В предыдущем примере класс F не может вызвать метод DoWork
в классе D. Таким образом, абстрактный класс может заставить производные классы предоставлять новые реализации для виртуальных методов.
Запечатанные классы и члены класса
Классы можно объявить как запечатанные , поместив ключевое слово sealed
перед определением класса. Рассмотрим пример.
public sealed class D
{
// Class members here.
}
Запечатанный класс нельзя использовать в качестве базового класса. По этой причине он также не может быть абстрактным классом. Запечатанные классы предотвращают производность. Так как они никогда не могут использоваться в качестве базового класса, некоторые оптимизации во время выполнения могут немного ускорить вызов запечатанных членов класса.
Метод, индексатор, свойство или событие в производном классе, переопределяющий виртуальный член базового класса, может объявить этот элемент как запечатанный. Это отрицает виртуальный аспект члена для любого дальнейшего производного класса. Это достигается путем добавления ключевого слова sealed
перед ключевым словом переопределение в объявлении члена класса. Рассмотрим пример.
public class D : C
{
public sealed override void DoWork() { }
}