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 static
palavra-chave à classe? O que isso significaria então?
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 static
palavra-chave à classe? O que isso significaria então?
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:
class SomeClass {
public int InstanceMethod() { return 1; }
public static int StaticMethod() { return 42; }
}
Para ligar 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
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
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));
Console.ReadKey();
}
}
public static class Tools
{
public static string ToUpperCase(string str)
{
return str.ToUpper();
}
}
}
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
Em breve 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();
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
static
classe não tem nenhuma instância.