Eu pesquisei sobre variáveis estáticas em C #, mas ainda não estou entendendo seu uso. Além disso, se eu tentar declarar a variável dentro do método, não me dará permissão para fazer isso. Por quê?
Eu vi alguns exemplos sobre as variáveis estáticas. Eu vi que não precisamos criar uma instância da classe para acessar a variável, mas isso não é suficiente para entender o que é seu uso e quando usá-lo.
Segunda coisa
class Book
{
public static int myInt = 0;
}
public class Exercise
{
static void Main()
{
Book book = new Book();
Console.WriteLine(book.myInt); // Shows error. Why does it show me error?
// Can't I access the static variable
// by making the instance of a class?
Console.ReadKey();
}
}
c#
static
static-variables
Kartik Patel
fonte
fonte
Book
) não por meio de uma instância (book
), então a solução mais fácil éBook.myInt
.Respostas:
Uma
static
variável compartilha seu valor entre todas as instâncias da classe.Exemplo sem declarar estático:
Explicação: Se você olhar o exemplo acima, eu apenas declaro a
int
variável. Quando eu executar este código, a saída será10
e10
. É simples.Agora, vamos examinar a variável estática aqui; Estou declarando a variável como um
static
.Exemplo com variável estática:
Agora, quando eu executar o código acima, a saída será
10
e15
. Portanto, o valor da variável estática é compartilhado entre todas as instâncias dessa classe.fonte
C # não tem variáveis estáticas . Você pode declarar o campo estático na definição de tipo particular por meio de C #. O campo estático é um estado compartilhado com todas as instâncias de um tipo específico. Portanto, o escopo do campo estático é do tipo inteiro. É por isso que você não pode declarar um campo estático dentro de um método - o método é um escopo em si, e os itens declarados em um método devem ser inacessíveis além da borda do método.
fonte
variáveis estáticas são usadas quando apenas uma cópia da variável é necessária. então, se você declarar a variável dentro do método, não há uso dela, ela se torna local para funcionar apenas ..
exemplo de estática é
Variáveis declaradas como estáticas são comumente compartilhadas por todas as instâncias de uma classe.
Variáveis declaradas como estáticas são comumente compartilhadas por todas as instâncias de uma classe. Quando você cria várias instâncias da classe VariableTest, essa variável permanente é compartilhada por todas elas. Portanto, em qualquer ponto do tempo, haverá apenas um valor de string contido na variável permanente.
Como há apenas uma cópia da variável disponível para todas as instâncias, o código this.permament resultará em erros de compilação porque pode ser lembrado que this.variablename se refere ao nome da variável de instância. Assim, as variáveis estáticas devem ser acessadas diretamente, conforme indicado no código.
fonte
Alguns exemplos do "mundo real" para variáveis estáticas:
construir uma classe onde você pode alcançar valores codificados para seu aplicativo. Semelhante a uma enumeração, mas com mais flexibilidade no tipo de dados.
O singleton amplamente conhecido, permite controlar para ter exatamente uma instância de uma classe. Isso é muito útil se você quiser acessá-lo em todo o seu aplicativo, mas não passá-lo para todas as classes apenas para permitir que essa classe o use.
e é assim que você chamaria o gerenciador de textura
Sobre sua última pergunta: você está se referindo ao erro do compilador CS0176 . Tentei encontrar mais informações sobre isso, mas só consegui descobrir o que o msdn tinha a dizer sobre isso:
fonte
Variáveis estáticas são usadas quando apenas uma cópia delas é necessária. Deixe-me explicar isso com um exemplo:
Agora aqui nós criamos 2 instâncias para nosso
class
círculo, ou seja, 2 conjuntos de cópias_PI
juntamente com outras variáveis são criados. Portanto, digamos que se tivermos muitas instâncias dessa classe, várias cópias de_PI
serão criadas ocupando a memória. Então, nesses casos, é melhor fazer com que essas variáveis se pareçam_PI
static
e operem com elas.Agora, não importa quantas instâncias são feitas para o
class
círculo, existe apenas uma cópia da variável_PI
salvando nossa memória.fonte
Classes estáticas não exigem que você crie um objeto dessa classe / instancie-as, você pode prefixar a palavra-chave C # estática na frente do nome da classe, para torná-la estática.
Lembre-se: não estamos instanciando a classe Console, classe String, classe Array.
fonte
Começando com este exemplo do @Kartik Patel, eu mudei um pouco, talvez agora esteja mais claro sobre a variável estática
Variável de classe VS Variável de instância em C #
Membros da classe estática C # OU Variável de classe
}
https://en.wikipedia.org/wiki/Class_variable
https://en.wikipedia.org/wiki/Instance_variable
https://en.wikipedia.org/wiki/Static_variable
https://javaconceptoftheday.com/class-variables-and-instance-variables-in-java/?fbclid=IwAR1_dtpHzg3bC5WlGQGdgewaTvuOI6cwVeFUtTV8IZuGTj1qH5PmKGwX0yM
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members
Os membros de dados e membros de função que operam na instância do tipo são chamados de membros de instância. O método ToString de int (por exemplo) são exemplos de membros de instância. Por padrão, os membros são membros da instância. Membros de dados e membros de função que não operam na instância do tipo, mas sim no próprio tipo, devem ser marcados como estáticos. Os métodos Test.Main e Console.WriteLine são métodos estáticos. A classe Console é, na verdade, uma classe estática, o que significa que todos os seus membros são estáticos. Você nunca realmente cria instâncias de um console - um console é compartilhado por todo o aplicativo.
fonte
Em resposta ao "quando usar?" questão:
Costumo usar uma variável estática (classe) para atribuir um ID de instância exclusivo a cada instância de uma classe. Eu uso o mesmo código em todas as aulas, é muito simples:
Isso ilustra alguns pontos sobre variáveis e métodos estáticos:
Acho isso útil porque desenvolvo aplicativos nos quais enxames de objetos são usados e é bom ser capaz de rastrear quantos foram criados e rastrear / consultar instâncias individuais.
Eu também uso variáveis de classe para rastrear coisas como totais e médias de propriedades das instâncias que podem ser relatadas em tempo real. Acho que a classe é um bom lugar para manter informações resumidas sobre todas as instâncias da classe.
fonte
Tente ligar diretamente com o nome da classe
Book.myInt
fonte
Em comparação com as variáveis de sessão, as variáveis estáticas terão o mesmo valor para todos os usuários, considerando que estou usando um aplicativo que é implantado no servidor. Se dois usuários acessarem a mesma página de um aplicativo, a variável estática manterá o valor mais recente e o mesmo valor será fornecido a ambos os usuários, ao contrário das variáveis de sessão que são diferentes para cada usuário. Portanto, se você quiser algo comum e igual para todos os usuários, incluindo os valores que devem ser usados ao longo do código do aplicativo, use apenas estático.
fonte
Você não precisa instanciar um objeto, porque você vai usar uma variável estática: Console.WriteLine (Book.myInt);
fonte
A variável estática retém seu valor anterior até a saída do programa. Static é usado chamando diretamente class_Name.Method () ou class_Name.Property. Nenhuma referência de objeto é necessária. O uso mais popular de estática é a classe matemática do C #. Math.Sin (), Math.Cos (), Math.Sqrt ().
fonte