Pergunta

línguas em OOP, como C # ou VB.NET, se eu fizer as propriedades ou métodos em um protected classe super eu não posso acessá-los na minha forma - eles só podem ser acessados ??na minha classe que herda essa classe super.

Para acessar essas propriedades ou métodos que eu preciso para torná-los public, que derrota o encapsulamento, ou re-escrever-los em minha classe, que derrota herança.

O que é o caminho certo para fazer isso?

Foi útil?

Solução

"necessidade de torná-los públicos que derrota encapsulamento"

Do projeto Não fundir bom com as regras de visibilidade nojento. As regras de visibilidade são confusas. Há realmente dois tipos ortogonais de visibilidade - subclasse e cliente. Não está perfeitamente claro por que nós tínhamos nada, nunca esconder de nossos subclasses. Mas podemos, com private.

Aqui está o que é importante. Encapsulamento não esconder média. Protegido e privado não são uma parte essencial da boa encapsulamento. Você pode fazer um bom design com tudo sendo público (que é a maneira Python funciona, por exemplo).

O material protegido / privado é - na sua maioria - cerca de gestão da propriedade intelectual: você está disposto a comprometer (em um juridicamente vinculativo "veja-you-in-court-se-que-não-trabalho" maneira ) para uma interface? Se o seu desenvolvimento de software envolve advogados, em seguida, você se preocupa com a adição de proteção e privado para as coisas que você não está comprometido.

Se você não tem que lidar com os advogados, considere fazer encapsulamento direito, mas deixar tudo público.

Outras dicas

Se você tem o código que precisa pedir uma classe para executar uma operação específica, mas a classe não apresenta o seu código com um meio de fazer isso, então a classe não te satisfazer requisitos de códigos.

Seu pouco como dizer que eu tenho um carro (automóvel) que tem um volante protegido, então não posso acessá-lo. O carro é inútil para mim.

Quer fazer os membros públicos (ou pelo menos interno) e usá-los ou vala a classe ea utilização que lhe dá o seu código de consumir os recursos que ele precisa.

Talvez o que você está procurando realmente é uma interface. A interface contém os membros as suas necessidades de código e você implementar essa interface em sua classe. A vantagem aqui é que sua classe pode determinar que os membros estão sendo acessados ??através desta interface em vez de uma subclasse de herdar.

Infelizmente, não é claro o que você quer dizer com "Na minha Form" - qual é a relação entre o formulário e suas duas classes? Se suas classes são controles no mesmo projeto, e você quer propriedades de acesso a partir do formulário, você deve usar a palavra-chave 'interna'.

Há pelo menos três maneiras que você pode restringir quem pode utilizar algum método de instância particular de instâncias de classe particulares:

  1. Definir o método como `protected`,` internal`, ou `private`. No primeiro caso, um método de exemplo só poderão ser usados ??métodos de dentro da classe derivada do mesmo exemplo; no segundo caso, todas as classes dentro da montagem terá acesso a esses métodos, mas classes de fora não; No terceiro caso, há aulas de fora, mesmo os derivados do mesmo conjunto, terá acesso, a menos que seu código está aninhada dentro da classe declarante.
  2. Definir o método como `public`, mas tem as classes que criar instâncias mantê-los privados e nunca expô-los para o mundo exterior. Qualquer pessoa que queira chamar um método de instância em um objeto tem que ter uma instância para invocar-lo. Se uma classe detém casos, mas nunca expõe referências diretas a eles, os únicos métodos de instância que pode nunca ser usados ??nesses casos serão aqueles que as classes Holding utiliza si.
  3. Definir o método como `public`, mas ter um construtor que aceita um local no qual um ou mais delegados para métodos privados podem ser armazenados. Código com acesso a esses delegados será capaz de chamar os métodos referidos assim, mas outro código não vai (exceto usando Reflexão em maneiras que eu acho que só podem ser usados ??em cenários de confiança total).

Se Reflexão em cenários não-de confiança total seria permitir que os delegados não ligados a ser obrigado a instâncias de objetos arbitrários, pode-se usar classes aninhadas para reforçar # 3 para que um teria de campos acesso private para ter acesso ilegítimo às funções private ; que iria ser proibido cenários de confiança total externos.

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