Eu irei com os problemas mais óbvios dos métodos estáticos com os parâmetros "this" explícitos:
-
Você perde o despacho virtual e, subsequentemente, o polimorfismo. Você nunca pode substituir esse método em uma classe derivada. É claro que você pode declarar um método
new
(static
) em uma classe derivada, mas qualquer código que o acessa deve estar ciente da hierarquia de classes inteira e fazer a verificação explícita e conversão, que é precisamente o que a OO deve evite . -
Classificando uma extensão de # 1, não é possível substituir instâncias da classe por uma interface , porque as interfaces (na maioria das linguagens) não podem declarar
static
métodos. -
A verbosidade desnecessária. Qual é mais legível:
Subject.Update(subject)
ou apenassubject.Update()
? -
Verificação de argumentos. Novamente depende da linguagem, mas muitos irão compilar uma verificação implícita para garantir que o argumento
this
não sejanull
para evitar que um erro de referência nula crie condições de tempo de execução inseguras (tipo de saturação de buffer). Não usando métodos de instância, você teria que adicionar essa verificação explicitamente no início de cada método. -
É confuso. Quando um programador normal e razoável vê um método
static
, ele naturalmente assume que ele não requer uma validade instância (a menos que seja preciso várias instâncias, como um método de comparação ou igualdade, ou espera-se que seja capaz de operar comnull
de referências). Ver os métodos estáticos usados desta maneira nos levará a uma tomada dupla ou talvez tripla, e depois da 4ª ou 5ª vez estaremos estressados e zangados, e Deus te ajude se soubermos o endereço de sua casa. -
É uma forma de duplicação. O que realmente acontece quando você invoca um método de instância é que o compilador ou tempo de execução procura o método na tabela de métodos do tipo e invoca-o usando
this
como argumento. Você está basicamente reimplementando o que o compilador já faz. Você está violando DRY , repetindo o mesmo parâmetro várias vezes em diferentes métodos quando não é necessário.
É difícil conceber qualquer razão boa para substituir os métodos de instância por métodos estáticos. Por favor, não faça isso.