Selar
Observação
Este conteúdo é reimpresso com permissão da Pearson Education, Inc. de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Essa edição foi publicada em 2008 e, desde então, o livro foi totalmente revisado na terceira edição. Algumas das informações nesta página podem estar desatualizadas.
Um dos recursos das estruturas orientadas a objetos é que os desenvolvedores podem estendê-las e personalizá-las de maneiras inesperadas pelos designers de estrutura. Esse é o poder e o risco do design extensível. Assim, ao projetar sua estrutura, é muito importante ter o cuidado de projetá-la para a extensibilidade quando ela for desejada e limitar essa extensibilidade quando ela se tornar arriscada.
Um mecanismo poderoso que impede a extensibilidade é a selagem. Você pode selar a classe ou membros individuais. Selar uma classe impede que os usuários herdem da classe. Selar um membro impede que os usuários substituam um membro específico.
❌ NÃO faça a selagem de classes sem ter um bom motivo para fazer isso.
Selar uma classe porque você não pode pensar em um cenário de extensibilidade não é um bom motivo. Os usuários da estrutura gostam de herdar de classes por vários motivos não óbvios, como adicionar membros de conveniência. Consulte Classes não seladas para obter exemplos de motivos não óbvios que os usuários desejam herdar de um tipo.
Os bons motivos para selar uma classe incluem os seguintes:
A classe é estática. Consulte Design de classe estática.
A classe armazena segredos confidenciais de segurança em membros protegidos herdados.
A classe herda muitos membros virtuais e o custo de selá-los individualmente superaria os benefícios de deixar a classe não selada.
A classe é um atributo que requer uma pesquisa de runtime muito rápida. Os atributos selados têm níveis de desempenho ligeiramente mais altos do que os não selados. Consulte Atributos.
❌ NÃO declare membros protegidos ou virtuais em tipos selados.
Por definição, um tipo selado não pode ser herdado. Isso significa que os membros protegidos nos tipos selados não podem ser chamados e os métodos virtuais nos tipos selados não podem ser substituídos.
✔️ CONSIDERE a selagem de membros que você substitui.
Problemas que podem resultar da introdução de membros virtuais (discutidos em Membros Virtuais) também se aplicam a substituições, embora em um grau ligeiramente menor. Selar uma substituição protege você desses problemas a partir desse ponto na hierarquia de herança.
Portions © 2005, 2009 Microsoft Corporation. Todos os direitos reservados.
Reimpresso com permissão da Pearson Education, Inc. das Diretrizes de Design do Framework: convenções, linguagens e padrões para bibliotecas do .NET reutilizável, 2ª edição por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 por Addison-Wesley Professional como parte da série de desenvolvimento do Microsoft Windows.