sealed (odwołanie w C#)sealed (C# Reference)

Po zastosowaniu do klasy, sealed modyfikator uniemożliwia innych klas z niego dziedziczącego.When applied to a class, the sealed modifier prevents other classes from inheriting from it. W poniższym przykładzie klasa B dziedziczy z klasy A, ale klasa nie może dziedziczyć z klasy B.In the following example, class B inherits from class A, but no class can inherit from class B.

class A {}
sealed class B : A {}

Można również użyć sealed modyfikator metoda lub właściwość, która zastępuje metodę wirtualną lub właściwości w klasie bazowej.You can also use the sealed modifier on a method or property that overrides a virtual method or property in a base class. Dzięki temu można umożliwić klasy pochodzi od klasy i uniemożliwić zastępowanie konkretnych metod wirtualnych lub właściwości.This enables you to allow classes to derive from your class and prevent them from overriding specific virtual methods or properties.

PrzykładExample

W poniższym przykładzie Z dziedziczy Y , ale Z nie może przesłonić funkcji wirtualnej F zadeklarowanego w X i zamkniętych w Y.In the following example, Z inherits from Y but Z cannot override the virtual function F that is declared in X and sealed in 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"); }
}

Definiując nowe metody lub właściwości w klasie, można zapobiec klas pochodnych zastępowania ich nie deklarując je jako wirtualnego.When you define new methods or properties in a class, you can prevent deriving classes from overriding them by not declaring them as virtual.

Jest to błąd, aby użyć abstrakcyjne modyfikator za pomocą klasy zapieczętowanej ponieważ klasy abstrakcyjnej muszą być dziedziczone przez klasę, która dostarcza implementację metody abstrakcyjne lub właściwości.It is an error to use the abstract modifier with a sealed class, because an abstract class must be inherited by a class that provides an implementation of the abstract methods or properties.

Po zastosowaniu do metody lub właściwości, sealed modyfikator zawsze musi być używany z zastąpienia.When applied to a method or property, the sealed modifier must always be used with override.

Ponieważ struktury niejawnie są zamknięte, nie może być dziedziczona.Because structs are implicitly sealed, they cannot be inherited.

Aby uzyskać więcej informacji, zobacz dziedziczenia.For more information, see Inheritance.

Aby uzyskać więcej przykładów, zobacz abstrakcyjnych i zapieczętowanych klas i składowych klasy.For more examples, see Abstract and Sealed Classes and Class Members.

PrzykładExample

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

W poprzednim przykładzie możesz spróbować dziedziczą z klasy zapieczętowanej przy użyciu następujących instrukcji:In the previous example, you might try to inherit from the sealed class by using the following statement:

class MyDerivedC: SealedClass {} // Error

Wynik jest komunikat o błędzie:The result is an error message:

'MyDerivedC': cannot derive from sealed type 'SealedClass'

UwagiRemarks

Aby ustalić, czy ma być Zapieczętuj klasę, metodę lub właściwość, zazwyczaj należy rozważyć następujące dwa punkty:To determine whether to seal a class, method, or property, you should generally consider the following two points:

  • Potencjalnych korzyści, że wyprowadzanie klas mogą uzyskać za pośrednictwem możliwość dostosowania swojej klasy.The potential benefits that deriving classes might gain through the ability to customize your class.

  • Ryzyko, że wyprowadzanie klas można zmodyfikować klas w taki sposób, że będzie już działać poprawnie lub oczekuje.The potential that deriving classes could modify your classes in such a way that they would no longer work correctly or as expected.

specyfikacja języka C#C# language specification

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#.For more information, see the C# Language Specification. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.The language specification is the definitive source for C# syntax and usage.

Zobacz takżeSee also