Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
При применении модификатора к классу sealed другие классы не наследуются от этого класса. В следующем примере класс B наследуется от класса A, но не может наследоваться от класса B.
class A {}
sealed class B : A {}
Также можно использовать модификатор sealed в методе или свойстве, которые переопределяют виртуальный метод или свойство в базовом классе. С помощью этого подхода разработчики могут наследовать классы из класса, не переопределяя определенные виртуальные методы или свойства.
Справочные документы по языку C# описывают последнюю выпущенную версию языка C#. Она также содержит начальную документацию по функциям в общедоступных предварительных версиях для предстоящего языкового выпуска.
Документация определяет любую функцию, впервые представленную в последних трех версиях языка или в текущих общедоступных предварительных версиях.
Подсказка
Чтобы узнать, когда функция впервые появилась в C#, ознакомьтесь со статьей об истории версий языка C#.
В следующем примере Z наследуется, Y но Z не может переопределить виртуальную функцию F , объявленную X и запечатаемую в Yней.
class X
{
protected virtual void F() { Console.WriteLine("X.F"); }
protected virtual void F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
sealed protected override void F() { Console.WriteLine("Y.F"); }
protected override void F2() { Console.WriteLine("Y.F2"); }
}
class Z : Y
{
// Attempting to override F causes compiler error CS0239.
// protected override void F() { Console.WriteLine("Z.F"); }
// Overriding F2 is allowed.
protected override void F2() { Console.WriteLine("Z.F2"); }
}
При определении новых методов или свойств в классе можно предотвратить, чтобы производные классы переопределяли их, не объявляя их как виртуальные.
При переопределении virtual элемента, объявленного в базовом типе, можно предотвратить переопределение типов с помощью sealed ключевого слова, как показано в следующем примере:
public sealed override string ToString() => Value;
Это ошибка использования абстрактного модификатора с запечатанным классом, так как абстрактный класс должен наследоваться классом, предоставляющим реализацию абстрактных методов или свойств.
При применении модификатора к методу или свойству sealed всегда используйте его с переопределением.
Поскольку структуры неявно запечатываются, вы не можете наследовать от них.
Дополнительные сведения см. в разделе наследования.
Для дополнительных примеров см. раздел Абстрактные и закрытые классы и члены классов.
sealed class SealedClass
{
public int x;
public int y;
}
class SealedTest2
{
static void Main()
{
var sc = new SealedClass();
sc.x = 110;
sc.y = 150;
Console.WriteLine($"x = {sc.x}, y = {sc.y}");
}
}
// Output: x = 110, y = 150
В предыдущем примере вы можете попытаться наследовать от запечатанного класса следующим образом:
class MyDerivedC: SealedClass {} // Error
Результатом является сообщение об ошибке:
'MyDerivedC': cannot derive from sealed type 'SealedClass'
Чтобы определить, следует ли запечатывать класс, метод или свойство, обычно рассмотрим следующие два пункта:
- Потенциальные преимущества, которые могут получить производные классы благодаря возможности настройки вашего класса.
- Потенциал, который производные классы могут изменять классы таким образом, чтобы они больше не работали правильно или как ожидалось.
Спецификация языка C#
Дополнительные сведения см. в спецификации языка C# . Спецификация языка является окончательным источником для синтаксиса И использования C#.