Compartilhar via


sealed (C# Reference)

Quando aplicado a uma classe, o sealed modificador impede que outras classes herde de proprietário. No exemplo a seguir, a classe B herda da classe A, mas nenhuma classe pode herdar da classe B.

    class A {}    
    sealed class B : A {}

Você também pode usar o sealed modificador em um método ou propriedade, que substitui um método virtual ou uma propriedade em uma classe de base. Isso permite que você permitir classes derivar de sua classe e impedir que substituir métodos virtuais específicos ou propriedades.

Exemplo

No exemplo a seguir, Z herda de Y mas Z não pode substituir a função virtual F que é declarado em X e selado na 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("X.F3"); }
    }
    class Z : Y
    {
        // Attempting to override F causes compiler error CS0239.
        // protected override void F() { Console.WriteLine("C.F"); }

        // Overriding F2 is allowed.
        protected override void F2() { Console.WriteLine("Z.F2"); }
    }

Quando você define novos métodos ou propriedades em uma classe, você pode impedir derivados classes substituindo-os por não declará-los como virtual.

É um erro para usar o abstrata modificador com uma classe selada, porque uma classe abstrata que deve ser herdada por uma classe que fornece uma implementação das propriedades ou métodos abstratos.

Quando aplicado a um método ou propriedade, o sealed modificador sempre deve ser usado com Substituir.

Porque structs implicitamente são seladas, eles não podem ser herdados.

Para obter mais informações, consulte Inheritance (C# Programming Guide).

Para obter mais exemplos, consulte Abstract and Sealed Classes and Class Members (C# Programming Guide).

    sealed class SealedClass
    {
        public int x;
        public int y;
    }

    class SealedTest2
    {
        static void Main()
        {
            SealedClass sc = new SealedClass();
            sc.x = 110;
            sc.y = 150;
            Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y);
        }
    }
    // Output: x = 110, y = 150

No exemplo anterior, você pode experimentar herdar da classe sealed usando a instrução a seguir:

class MyDerivedC: SealedClass {} // Error

O resultado é uma mensagem de erro:

'MyDerivedC' cannot inherit from sealed class 'SealedClass'.

Especificação da linguagem C#

Para obter mais informações, consulte C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Comentários

Para determinar se deve selar uma classe, método ou propriedade, geralmente, considere os dois pontos a seguintes:

  • Os possíveis benefícios que derivar classes pode obter por meio da capacidade de personalizar a sua classe.

  • O potencial de derivar classes poderia modificar suas classes de tal forma que podem não funcionar corretamente ou como esperado.

Consulte também

Referência

C# Keywords

Static Classes and Static Class Members (C# Programming Guide)

Abstract and Sealed Classes and Class Members (C# Programming Guide)

Access Modifiers (C# Programming Guide)

Modifiers (C# Reference)

override (C# Reference)

virtual (C# Reference)

Conceitos

C# Programming Guide

Outros recursos

C# Reference