Funções MustInherit e compartilhados
-
12-09-2019 - |
Pergunta
Eu estou olhando para uma classe VB.NET (que eu não escrevi) que é declarado MustInherit
(abstract
em C #, eu acredito) que tem três métodos, os quais são definidos como Shared
(static
em C #) . Não há propriedades ou campos na classe - apenas os três métodos. De uma perspectiva OO, isso faz algum sentido?
Meu pensamento não é, pois, tornando-MustInherit
, você está dizendo essencialmente que você não pode criar uma instância dessa classe - você deve herdar a partir dele e criar uma instância do derivada classe . Mas desde que todos os métodos são compartilhados, você nunca vai realmente criar uma instância da classe pai de qualquer maneira, de modo que o MustInherit
não é bom. Você pode muito bem não marcá-lo MustInherit
e apenas herdar-lo quando quiser.
Existe uma situação onde a criação de uma classe desta forma faz sentido?
Solução
Como já foi dito, parece que eles realmente queriam uma classe # estática C. VB do equivalente a "estática" é "compartilhada", mas você não pode aulas de marca "compartilhada" em VB. A diferença é que alguém poderia herdar desta classe e, em seguida, criar uma instância. Classes C # estáticos são selados.
O que eles deve tem feito é usar um Module
. A Module
VB e C # classe estática são praticamente idênticos: membros estão associados com o tipo, em vez de uma instância e você não pode herdar a partir deles
Outras dicas
Do ponto de vista OO, isso não faz muito sentido.
No entanto, VB não tem uma maneira de sinalizar uma classe como Shared, como C # faz. Em C #, você bandeira provável que esta classe como um static class
- o MustInherit provavelmente foi adicionado para tentar impedir as pessoas de criar uma instância dele, mesmo que ele é basicamente uma classe estática
Em C # uma classe pode ser declarada como estático (= Shared), e acho que não VB.NET não permite isso, então como uma solução alternativa é marcado abstrato (MustInherit), de modo que nunca é instanciado