Palavra-chave estática em c #

Estou muito confuso com o verdadeiro significado da palavra-chave estática em c #. Eu tenho passado por artigos diferentes na internet, mas nenhum deles está realmente me ajudando a entender seu significado e outras fonts não são confiáveis. Eu sei que o Stack Overflow tem algumas mentes shinys que podem me ajudar a entender o verdadeiro significado da estática

  • Quando eles são inicializados.
  • methods, propriedades, classs e construtores estáticos
  • Estática vs readonly vs constante

Em suma, a estática efetivamente significa “associada a um tipo em vez de uma única instância do tipo”. Portanto, há um conjunto de variables ​​estáticas para um tipo (dentro de um AppDomain), independentemente de você ter 0 instâncias ou um milhão; você não precisa de uma instância para acessar um membro estático, etc.

O ponto exato de boot de variables ​​estáticas depende se há também um construtor estático ou não, mas muito amplamente é “uma vez, geralmente antes que algo significativo aconteça na class”. (Veja este blog para uma descrição mais detalhada.)

Enquanto os campos readonly podem ser estáticos ou de instância (ou seja, relacionados ao tipo ou relacionados a uma instância do tipo), os valores const sempre são implicitamente estáticos (são constantes de tempo de compilation, portanto, não faria sentido ter um cópia por instância).

Às vezes, você pode ver a static sendo descrita como “compartilhada entre todas as instâncias de um tipo”. Pessoalmente, não gosto dessa descrição, pois sugere que deve haver pelo menos uma instância … e, na verdade, você não precisa de instâncias para usar um membro estático. Eu prefiro pensar neles como totalmente separados, em vez de serem “compartilhados” entre instâncias.

Eu recomendo este artigo, parece bastante descritivo: Static Keyword Demystified

Eu também recomendaria um artigo oficial c # Programming Guide que abrange os vários usos da palavra-chave estática. Você pode ir desde lá, pois há muitos links para diferentes artigos do MSDN .: Classes Estáticas e Membros de Classe Estática (Guia de Programação C #)

Um pouco sobre constante (const) e readonly:

  • constante ou const é variável que não pode ser modificada e qual valor é conhecido em tempo de compilation.
  • readonly é muito semelhante a constante, isso também não pode ser modificado, a diferença é que um campo readonly pode ser modificado / inicializado uma vez no construtor. Depois disso, readonly é o mesmo que constante.

Usando exemplos:

 constant: const int a=10; // value cannot be modified, value is known at compile time 

Mas o que fazer quando queremos campo constante cujo valor não é conhecido em tempo de compilation?

 eg const PersonClass a=new PersonClass("name"); // error 

A resposta é um campo somente leitura:

 readonly: readonly PersonClass a=new PersonClass("name"); // all correct 

Da documentação:

Os inicializadores de variável de campo estático de uma class correspondem a uma seqüência de atribuições que são executadas na ordem textual em que aparecem na declaração de class

Membros estáticos são iniciados no primeiro access à class e são executados em ordem textual.

Métodos Static , propriedades são partes da class e não da instância.

Static não tem nada a ver com readonly ou constant . Static é uma maneira como um membro acessado , readonly e constant é como um membro armazenado / gerenciado .