O que é um "método estático" em c#?




methods static (7)

O que significa quando você adiciona a palavra-chave estática a um método?

public static void doSomething(){
   //Well, do something!
}

Você pode adicionar a palavra-chave static à classe? O que significaria então?


Um método estático, campo, propriedade ou evento é chamado em uma classe mesmo quando nenhuma instância da classe foi criada. Se alguma instância da classe for criada, ela não poderá ser usada para acessar o membro estático. Apenas uma cópia de campos estáticos e eventos existe, e os métodos e propriedades estáticos só podem acessar campos estáticos e eventos estáticos. Membros estáticos são freqüentemente usados ​​para representar dados ou cálculos que não mudam em resposta ao estado do objeto; por exemplo, uma biblioteca de matemática pode conter métodos estáticos para calcular seno e cosseno. Membros da classe estática são declarados usando a palavra-chave estática antes do tipo de retorno do membro


A palavra-chave static, quando aplicada a uma classe, diz ao compilador para criar uma única instância dessa classe. Não é possível, então, 'new' uma ou mais instâncias da classe. Todos os métodos em uma classe estática devem ser declarados estáticos.

É possível, e muitas vezes desejável, ter métodos estáticos de uma classe não estática. Por exemplo, um método de fábrica ao criar uma instância de outra classe é frequentemente declarado estático, pois isso significa que uma instância específica da classe que contém o método de fator não é necessária.

Para uma boa explicação de como, quando e onde ver o MSDN


Variável estática não vincula com objeto da classe. Pode ser acessado usando o nome da classe. Todo objeto da classe compartilhará a variável estática.

Ao tornar a função como estática, ela restringirá o acesso dessa função nesse arquivo.


Uma função static , diferente de uma função regular ( instância ), não está associada a uma instância da classe.

Uma classe static é uma classe que pode conter apenas membros static e, portanto, não pode ser instanciada.

Por exemplo:

class SomeClass {
    public int InstanceMethod() { return 1; }
    public static int StaticMethod() { return 42; }
}

Para chamar InstanceMethod , você precisa de uma instância da classe:

SomeClass instance = new SomeClass();
instance.InstanceMethod();   //Fine
instance.StaticMethod();     //Won't compile

SomeClass.InstanceMethod();  //Won't compile
SomeClass.StaticMethod();    //Fine

Quando você adiciona uma palavra-chave "estática" a um método, isso significa que a implementação subjacente fornece o mesmo resultado para qualquer instância da classe. Escusado será dizer que o resultado varia com a alteração do valor dos parâmetros


Função estática significa que ela está associada a uma classe (não uma instância específica de classe, mas a própria classe) e pode ser chamada mesmo quando não existem instâncias de classe.

Classe estática significa que a classe contém apenas membros estáticos.


Logo você não pode instanciar a classe estática: Ex:

static class myStaticClass
{
    public static void someFunction()
    { /* */ }
}

Você não pode fazer assim:

myStaticClass msc = new myStaticClass();  // it will cause an error

Você pode fazer apenas:

myStaticClass.someFunction();




static