Pergunta

ReSharper sugere mudar a acessibilidade de um construtor public em uma classe abstract para protected, mas não indica a razão por trás disso.

Você pode lançar alguma luz?

Foi útil?

Solução

Simplesmente porque ser pública não faz sentido em uma classe abstrata. Uma classe abstrata, por definição, não pode ser instanciado diretamente. Só pode ser instanciada por um exemplo de um tipo derivado. Portanto, os únicos tipos que devem ter acesso a um construtor são seus tipos derivados e faz, portanto, protegidas muito mais sentido do público. Ele descreve com mais precisão a acessibilidade.

Outras dicas

É tecnicamente não faz qualquer diferença se você fizer a public construtor em vez de protected em uma classe abstrata. A acessibilidade / visibilidade do construtor ainda é exatamente a mesma: a mesma classe ou classes derivadas. As duas palavras-chave têm efeitos indistinguíveis para todos os efeitos.

Assim, esta escolha é apenas uma questão de estilo:. Tipo protected para satisfazer a Object Oriented pessoas experientes


Reflection por padrão incluem apenas o construtor quando é public, mas você não pode chamar esse construtor de qualquer maneira.

IntelliSense irá mostrar o construtor public quando digitação new, mas você não pode chamar esse construtor de qualquer maneira.

Os metadados do assembly irá refletir o fato de que o construtor é público ou protegido.

É uma boa prática OO.

public abstract class ExampleAbstractClass
{
    protected ExampleAbstractClass()
    {
      // :::
    }
}

Você só quer as classes criança herdar a ter acesso ao construtor. A única maneira de fazer isso é fazendo o construtor protegido.
Tenha em mente, quando você adicionar parâmetros para estes construtores, é uma discussão completamente diferente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top