Você pode usar o método estático sem criar uma instância dessa classe simplesmente por class_name.static_method_name ();
JavaScript é necessário
No nível de programação, temos a sensação de que podemos chamar um método estático sem criar uma instância de uma classe / tipo. Internamente, não é o caso. O CLR gerencia internamente uma instância especial chamada instância de tipo para gerenciar a chamada para métodos estáticos. Por favor, veja esta resposta. É tão intrigante.
RBT
Respostas:
313
Uma staticfunção, diferente da função regular ( instância ), não está associada a uma instância da classe.
Uma staticclasse é uma classe que pode conter apenasstatic membros e, portanto, não pode ser instanciada.
Então é como um método de classe em vez de um método de instância?
Moshe
4
@ Moshe: Exatamente. Com um método estático, você não precisa de uma instância da classe para chamar o método, apenas a classe.
Binary Worrier
3
Mas, na verdade, existe algum tipo de limitação técnica que impede a chamada de um método estático em uma instância? Se o compilador permitir, qual é o perigo de ser acessível?
Onde "StaticMethod" é o método de classe e "InstanceMethod" é um método de instância da classe SomeClass
Usman Younas
26
De outro ponto de vista: considere que você deseja fazer algumas alterações em uma única String. por exemplo, você deseja fazer as letras maiúsculas e assim por diante. você cria outra classe chamada "Ferramentas" para essas ações. não há sentido em criar instância da classe "Ferramentas" porque não há nenhum tipo de entidade disponível dentro dessa classe (compare com a classe "Pessoa" ou "Professor"). Portanto, usamos a palavra-chave estática para usar a classe "Tools" sem fazer nenhuma instância disso, e quando você pressiona ponto após o nome da classe ("Tools"), pode ter acesso aos métodos que deseja.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1{classProgram{staticvoidMain(string[] args){Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));Console.ReadKey();}}publicstaticclassTools{publicstaticstringToUpperCase(string str){return str.ToUpper();}}}
Usar "fazer alterações em uma string" é um mau exemplo - as strings são imutáveis e não podem ser alteradas. Mas, caso contrário, a explicação faz sentido (substituindo uma classe não-imutável para string)
Flydog57
13
Um método estático, campo, propriedade ou evento pode ser 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. Existe apenas uma cópia dos campos e eventos estáticos, e métodos e propriedades estáticos podem acessar apenas campos estáticos e eventos estáticos. Membros estáticos são frequentemente 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 de classe estática são declarados usando a palavra-chave static antes do tipo de retorno do membe
Função estática significa que está associada à classe (não uma instância específica da classe, mas a própria classe) e pode ser invocada mesmo quando não existem instâncias da classe.
Classe estática significa que a classe contém apenas membros estáticos.
Quando você adiciona uma palavra-chave "estática" a um método, 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 mudança no valor dos parâmetros
A variável estática não se vincula ao objeto da classe. Pode ser acessado usando o nome da classe. Todo objeto da classe compartilhará variável estática.
Tornando a função como estática, restringirá o acesso dessa função dentro desse arquivo.
A palavra-chave estática, quando aplicada a uma classe, diz ao compilador para criar uma única instância dessa classe. Não é possível 'nova' uma ou mais instâncias da classe. Todos os métodos em uma classe estática devem ser declarados estáticos.
É possível, e geralmente desejável, ter métodos estáticos de uma classe não estática. Por exemplo, um método de fábrica quando cria uma instância de outra classe geralmente é declarado estático, pois isso significa que uma instância específica da classe que contém o método fator não é necessária.
Para uma boa explicação de como, quando e onde, consulte o MSDN
Não, uma classe estática nunca é instanciada. Como tudo está estático, por que você deseja instanciar?
Jon Skeet
1
Uma staticclasse não tem nenhuma instância.
SLaks
4
Desculpe pessoal, eu não entendo ... Eu disse que uma única instância é criada e você não pode criar uma nova. Certamente, uma única instância estática é criada, caso contrário, o código não pode ser chamado?
quer
2
Uma classe estática tem uma instância, na verdade duas, elas simplesmente não são instâncias do Type. Uma classe estática existirá no heap como um objeto do tipo [Foo] (tabela de pesquisa de métodos etc para o JIT) e um objeto System.Type especial usado para inicialização.
Mccainz #
Uma classe pode ser declarada estática, indicando que ela contém apenas membros estáticos. Não é possível criar instâncias de uma classe estática usando a nova palavra-chave. As classes estáticas são carregadas automaticamente pelo CLR (Common Language Runtime) do .NET Framework quando o programa ou espaço para nome que contém a classe é carregado.
Respostas:
Uma
static
função, diferente da função regular ( instância ), não está associada a uma instância da classe.Uma
static
classe é uma classe que pode conter apenasstatic
membros e, portanto, não pode ser instanciada.Por exemplo:
Para ligar
InstanceMethod
, você precisa de uma instância da classe:fonte
De outro ponto de vista: considere que você deseja fazer algumas alterações em uma única String. por exemplo, você deseja fazer as letras maiúsculas e assim por diante. você cria outra classe chamada "Ferramentas" para essas ações. não há sentido em criar instância da classe "Ferramentas" porque não há nenhum tipo de entidade disponível dentro dessa classe (compare com a classe "Pessoa" ou "Professor"). Portanto, usamos a palavra-chave estática para usar a classe "Tools" sem fazer nenhuma instância disso, e quando você pressiona ponto após o nome da classe ("Tools"), pode ter acesso aos métodos que deseja.
fonte
Um método estático, campo, propriedade ou evento pode ser 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. Existe apenas uma cópia dos campos e eventos estáticos, e métodos e propriedades estáticos podem acessar apenas campos estáticos e eventos estáticos. Membros estáticos são frequentemente 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 de classe estática são declarados usando a palavra-chave static antes do tipo de retorno do membe
fonte
Função estática significa que está associada à classe (não uma instância específica da classe, mas a própria classe) e pode ser invocada mesmo quando não existem instâncias da classe.
Classe estática significa que a classe contém apenas membros estáticos.
fonte
Em breve você não pode instanciar a classe estática: Ex:
Você não pode fazer assim:
Você pode fazer apenas:
fonte
Quando você adiciona uma palavra-chave "estática" a um método, 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 mudança no valor dos parâmetros
fonte
A variável estática não se vincula ao objeto da classe. Pode ser acessado usando o nome da classe. Todo objeto da classe compartilhará variável estática.
Tornando a função como estática, restringirá o acesso dessa função dentro desse arquivo.
fonte
Núcleo da palavra-chave estática em que você terá apenas uma cópia na RAM deste (método / variável / classe) compartilhada para todas as chamadas
fonte
A palavra-chave estática, quando aplicada a uma classe, diz ao compilador para criar uma única instância dessa classe. Não é possível 'nova' uma ou mais instâncias da classe. Todos os métodos em uma classe estática devem ser declarados estáticos.
É possível, e geralmente desejável, ter métodos estáticos de uma classe não estática. Por exemplo, um método de fábrica quando cria uma instância de outra classe geralmente é declarado estático, pois isso significa que uma instância específica da classe que contém o método fator não é necessária.
Para uma boa explicação de como, quando e onde, consulte o MSDN
fonte
static
classe não tem nenhuma instância.