A static
palavra-chave em um membro em vários idiomas significa que você não deve criar uma instância dessa classe para poder ter acesso a esse membro. No entanto, não vejo justificativa para fazer uma aula inteira static
. Por que e quando devo fazer uma aula static
?
Quais são os benefícios que recebo ao fazer uma aula static
? Quero dizer, depois de declarar uma classe estática, ainda devemos declarar todos os membros aos quais ele / ela deseja acessar sem instanciação, como estáticos também.
Isso significa que, por exemplo, a Math
classe pode ser declarada normal (não estática), sem afetar o modo como os desenvolvedores codificam. Em outras palavras, tornar uma classe estática ou normal é transparente para os desenvolvedores.
c#
class
static-keyword
Saeed Neamati
fonte
fonte
Respostas:
Isso torna óbvio para os usuários como a classe é usada. Por exemplo, seria absurdo completo escrever o seguinte código:
O C # não precisa proibir isso, mas, como não serve para nada, é melhor dizer isso ao usuário. Certas pessoas (inclusive eu) aderem à filosofia de que as linguagens de programação (e APIs ...) devem ser o mais restritivas possível para dificultar o uso errado: as únicas operações permitidas são aquelas que são significativas e (espero) corretas.
fonte
sealed
em primeiro lugar. Eu reconheço que nem todas as pessoas concordam com esse sentimento, mas os comentários não são um bom lugar para discutir isso. Mas, no caso destatic
este problema não até mesmo representar em si: instanciarSystem.Math
vai não faz sentido.Math
classe como estático sem declarar aMath
classe como estática, ainda poderá usá-lo, sem necessidade de instanciação.static
.new Math()
.O StackOverflow tem uma ótima discussão sobre esse tópico . Para facilitar a referência, copio e colo aqui, em nome de seu autor, Mark S. Rasmussen :
fonte
Estou surpreso que ninguém mais tenha mencionado que as
static
classes permitem métodos de extensão - estendendo com segurança um tipo existente (incluindo a adição de definições de métodos às interfaces ) que você não possui. Por exemplo, o que em Scala épode ser expresso em C # como
fonte
Para mim, uma classe estática (em C #) é como chamar uma função.
Por exemplo
Passo uma corda e volto uma corda. Tudo está contido nesse método. Sem acesso à variável membro, etc.
Honestamente, principalmente para mim, tem sido diminuir as linhas de código:
Por que fazer:
Quando eu posso fazer isso:
Então, eu usaria classes estáticas nesses casos, quando quisesse fazer algo sem a necessidade de uma classe e significaria menos digitação.
Os pontos Mark S. são válidos, mas para mim, se eu tiver alguns métodos utilitários, é mais fácil fingir que estou chamando uma função para referenciá-los como liners únicos.
Isso pode ser simplista, mas é principalmente assim que eu tenho usado
static
.fonte