Palavra-chave estática C#
Palavra-chave estática C#
Neste tutorial, aprenderemos sobre a palavra-chave static em C# com a ajuda de exemplos.
Em C#, se usarmos um static
palavra-chave com membros de classe, haverá uma única cópia do membro de tipo.
E todos os objetos da classe compartilham uma única cópia em vez de criar cópias individuais.
Variáveis estáticas C#
Se uma variável for declarada
static
, podemos acessar a variável usando o nome da classe. Por exemplo,
using System;
namespace StaticKeyword {
class Student {
// static variable
public static string department = "Computer Science";
}
class Program {
static void Main(string[] argos) {
// access static variable
Console.WriteLine("Department: " + Student.department);
Console.ReadLine();
}
}
}
Saída
Department: Computer Science
No exemplo acima, criamos uma variável estática chamada department . Como a variável é estática, usamos o nome da classe Aluno para acessar a variável.
Variáveis estáticas versus variáveis de instância
Em C#, cada objeto de uma classe terá sua própria cópia de variáveis de instância. Por exemplo,
class Student {
// instance variable
public string studentName;
}
class Program {
static void Main(string[] args) {
Student s1 = new Student();
Student s2 = new Student();
}
}
Aqui, ambos os objetos s1 e s2 terá cópias separadas da variável studentName . E, eles são diferentes um do outro.
No entanto, se declararmos uma variável estática, todos os objetos da classe compartilham a mesma variável estática. E não precisamos criar objetos da classe para acessar as variáveis estáticas.
Exemplo:C# variável estática vs. Variável de instância
using System;
namespace StaticKeyword {
class Student {
static public string schoolName = "Programiz School";
public string studentName;
}
class Program {
static void Main(string[] args) {
Student s1 = new Student();
s1.studentName = "Ram";
// calls instance variable
Console.WriteLine("Name: " + s1.studentName);
// calls static variable
Console.WriteLine("School: " + Student.schoolName);
Student s2 = new Student();
s2.studentName = "Shyam";
// calls instance variable
Console.WriteLine("Name: " + s2.studentName);
// calls static variable
Console.WriteLine("School: " + Student.schoolName);
Console.ReadLine();
}
}
}
Saída
Name: Ram School: Programiz School Name: Shyam School: Programiz School
No programa acima, a classe Student tem uma variável não estática chamada studentName e uma variável estática chamada schoolName .
Dentro do Programa classe,
s1.studentName
/s2.studentName
- chama a variável não estática usando objetos s1 e s2 respectivamenteStudent.schoolName
- chama a variável estática usando o nome da classe
Desde o schoolName é igual para todos os alunos, é bom fazer o schoolName estático. Economiza memória e torna o programa mais eficiente.
Métodos estáticos C#
Assim como as variáveis estáticas, podemos chamar os métodos estáticos usando o nome da classe.
class Test {
public static void display() {....}
}
class Program {
static void Main(string[] args) {
Test.display();
}
}
Aqui, acessamos o método estático diretamente de Program classes usando o nome da classe.
Quando declaramos um método estático, todos os objetos da classe compartilham o mesmo método estático.
Exemplo:C# métodos estáticos e não estáticos
using System;
namespace StaticKeyword {
class Test {
public void display1() {
Console.WriteLine("Non static method");
}
public static void display2() {
Console.WriteLine("Static method");
}
}
class Program {
static void Main(string[] args) {
Test t1 = new Test();
t1.display1();
Test.display2();
Console.ReadLine();
}
}
}
Saída
Non static method Static method
No programa acima, declaramos um método não estático chamado display1() e um método estático chamado display2() dentro da classe Teste .
Dentro da classe Program,
t1.display1()
- acesse o método não estático usando s1 objetoTest.display2()
- acessar o método estático usando o nome da classe Test
Observação :Em C#, o Principal método é estático. Assim, podemos chamá-lo sem criar o objeto.
Classe estática C#
Em C#, quando declaramos uma classe como estática, não podemos criar objetos da classe. Por exemplo,
using System;
namespace StaticKeyword {
static class Test {
static int a = 5;
static void display() {
Console.WriteLine("Static method");
}
static void Main(string[] args) {
// creating object of Test
Test t1 = new Test();
Console.WriteLine(a);
display();
}
}
}
No exemplo acima, temos uma classe estática Test . Criamos um objeto t1 da classe Teste .
Como não podemos fazer um objeto da classe estática, obtemos o seguinte erro:
error CS0723: Cannot declare a variable of static type 'Test'
error CS0712: Cannot create an instance of the static class
Observe que o campo e o método da classe estática também são estáticos porque só podemos ter membros estáticos dentro da classe estática.
Observação :Não podemos herdar uma classe estática em C#. Por exemplo,
static class A {
...
}
// Error Code
class B : A {
...
}
Acessar membros estáticos dentro da classe
Se estivermos acessando as variáveis e métodos estáticos dentro da mesma classe, podemos acessá-los diretamente sem usar o nome da classe. Por exemplo,
using System;
namespace StaticKeyword {
class Test {
static int age = 25;
public static void display() {
Console.WriteLine("Static method");
}
static void Main(string[] args) {
Console.WriteLine(age);
display();
Console.ReadLine();
}
}
}
Saída
25 Static method
Aqui, estamos acessando o campo estático age e método estático
display()
sem usar o nome da classe. Linguagem C