Em C #, com um conjunto de classes herdado - ao chamar um método, devemos usar as palavras-chave 'base.methodname e this.methodname' ... independentemente de ser um método substituído ou não?
É provável que o código sofra alterações em termos de lógica e talvez algumas condições semelhantes ao IF-ELSE possam ocorrer posteriormente. Portanto, naquele momento, o desenvolvedor deve ser obrigado a revisitar cada linha de código e garantir que ele / ela faça a escolha certa de qual método está sendo chamado --- base.methodname () ou this.methodname () ELSE the. NET estrutura chamará o padrão (acho que seu base.methodname ()) e toda a lógica pode ir para um lance.
c#
inheritance
MukeshAnAlsoRan
fonte
fonte
Respostas:
Usar a
base
palavra-chave não é uma questão de preferência, é uma questão de correção. Se você deseja chamar a implementação da classe base no método substituído, você deve usarbase
. Se você não quiser chamar assim, não poderá usarbase
.A
this
palavra-chave, por outro lado, é uma questão de preferência na maioria dos casos. Eu acho que isso apenas desorganiza desnecessariamente o código, então não o uso se não for necessário. Onde é útil é se você tiver um parâmetro de método com o mesmo nome que campo (ou propriedade). Eu usariathis
nesse caso. Mas se estou escrevendo um novo código, costumo usar convenções de nomenclatura que evitam esse problema.fonte
this
como assumido. Em projetos maiores em que terei junior (potencialmente até novas contratações), nosso padrão é usar essas palavras-chave apenas para que o escopo seja imediatamente evidente, independentemente do nível de experiência do codificador.base
qualquer maneira ao chamá-lo, mesmo que ele esteja semanticamente errado?this
é o mais básico possível. Se os programadores ainda não entenderem o escopo dos métodos (e othis.
acesso implícito dos membros do objeto, mesmo quando não escritos explicitamente), então eles terão que estudar. Está neles .this
é realmente fundamental. Espera-se o conhecimento de todos os degraus da escada de habilidades de programação.Eu sugeriria que, se você está chamando explicitamente um método base de uma classe na qual esse método é substituído, você tem um sério problema com lógica e legibilidade.
base
deve realmente aparecer apenas onde é chamada a implementação básica de um método substituído a partir desse método substituído.Em qualquer outro lugar, deveria estar
this
(se o método não for substituído, ele irá para a classe base de qualquer maneira) e não há nada de errado em permitir que o compilador deduza isso.fonte
this
palavra-chave: não existe uma regra rígida e rápida para aplicar athis
palavra-chave, pois é uma preferência pessoal, mas seu código pode ficar confuso.Prós e contras do uso dessa palavra-chave em C #
base
palavra-chave (reutilização): já existem respostas indicando o uso da base. Eu gostaria de acrescentar um ponto.A funcionalidade comum para todas as classes derivadas viria na classe base e você pode chamar o método base seguido pela implementação específica no método na classe derivada, obtendo reutilização.
fonte
Além do mencionado, você pode usar "this" ao chamar uma função de extensão.
Você não pode fazer:
de dentro do corpo do MyClass. Somente:
Não há motivo real para criar extensões estáticas para a classe que você está criando. O único cenário em que isso foi útil para mim é quando eu tinha funções de extensão baseadas na interface que minha classe está implementando, e não na própria classe.
fonte
Eu recomendaria soltar o
this.
prefixo, exceto nos casos em que adiciona simetria. Por exemplo:fonte