Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При применении модификатора к классу 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#.