virtual/substituir e novas palavras -chave em c#: quando usar qual palavra -chave para reescrever o método?
Ao definir métodos nas classes base, os programadores geralmente enfrentam o problema de usar as palavras -chave "virtual" ou "novas". Essa decisão afeta significativamente o comportamento da reescrita de métodos em classes derivadas.
substituir virtual
use a palavra -chave "virtual" no método da classe base para indicar que ela pode ser substituída na classe derivada. Para substituir o método, a classe derivada deve usar a palavra -chave "substituição". Isso garante que o método substituído funcione conforme o esperado, mantendo a hierarquia e o polimorfismo da herança.
Quando a classe derivada chama um método reescrito, ele executará a versão substituída, mesmo que a variável de referência que mantém o objeto for do tipo de classe base. Isso é chamado de ligação tardia e permite comportamento dinâmico.
nova palavra -chave
Em vez disso, a palavra -chave "nova" no método da classe derivada declara um novo método que oculta métodos herdados com o mesmo nome. Quando usado, o novo método substitui os métodos herdados na classe derivada, destruindo assim o polimorfismo.
Quando a classe derivada chama um método declarado com "novo", ele executa o novo método, independentemente do tipo de variável de referência que mantém o objeto. Isso é considerado a ligação precoce e dificulta o polimorfismo.
Exemplo
Considere o seguinte exemplo de código:
public class Base
{
public virtual bool DoSomething() { return false; }
}
public class Derived : Base
{
public new bool DoSomething() { return true; }
}
; Isso destaca a diferença entre a ligação tardia e a ligação precoce. Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3