Palabra clave estática de C#
Palabra clave estática de C#
En este tutorial, aprenderemos sobre la palabra clave estática en C# con la ayuda de ejemplos.
En C#, si usamos un static
palabra clave con miembros de clase, entonces habrá una sola copia del miembro de tipo.
Y todos los objetos de la clase comparten una sola copia en lugar de crear copias individuales.
Variables estáticas de C#
Si se declara una variable static
, podemos acceder a la variable usando el nombre de la clase. Por ejemplo,
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();
}
}
}
Salida
Department: Computer Science
En el ejemplo anterior, hemos creado una variable estática llamada departamento . Dado que la variable es estática, hemos utilizado el nombre de clase Estudiante para acceder a la variable.
Variables estáticas frente a variables de instancia
En C#, cada objeto de una clase tendrá su propia copia de las variables de instancia. Por ejemplo,
class Student {
// instance variable
public string studentName;
}
class Program {
static void Main(string[] args) {
Student s1 = new Student();
Student s2 = new Student();
}
}
Aquí, ambos objetos s1 y s2 tendrá copias separadas de la variable studentName . Y son diferentes entre sí.
Sin embargo, si declaramos una variable estática, todos los objetos de la clase comparten la misma variable estática. Y no necesitamos crear objetos de la clase para acceder a las variables estáticas.
Ejemplo:C# Variable estática vs. Variable de instancia
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();
}
}
}
Salida
Name: Ram School: Programiz School Name: Shyam School: Programiz School
En el programa anterior, la clase Student tiene una variable no estática llamada studentName y una variable estática llamada schoolName .
Dentro del Programa clase,
s1.studentName
/s2.studentName
- llama a la variable no estática usando objetos s1 y s2 respectivamenteStudent.schoolName
- llama a la variable estática usando el nombre de la clase
Desde el nombreDeLaEscuela es el mismo para todos los estudiantes, es bueno hacer el schoolName estático. Ahorra memoria y hace que el programa sea más eficiente.
Métodos estáticos de C#
Al igual que las variables estáticas, podemos llamar a los métodos estáticos usando el nombre de la clase.
class Test {
public static void display() {....}
}
class Program {
static void Main(string[] args) {
Test.display();
}
}
Aquí, hemos accedido al método estático directamente desde Program clases usando el nombre de la clase.
Cuando declaramos un método estático, todos los objetos de la clase comparten el mismo método estático.
Ejemplo:métodos estáticos y no estáticos de C#
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();
}
}
}
Salida
Non static method Static method
En el programa anterior, hemos declarado un método no estático llamado display1() y un método estático llamado display2() dentro de la clase Prueba .
Dentro de la clase Programa,
t1.display1()
- acceda al método no estático usando s1 objetoTest.display2()
- acceda al método estático usando el nombre de clase Test
Nota :En C#, el Principal El método es estático. Entonces, podemos llamarlo sin crear el objeto.
C# Clase estática
En C#, cuando declaramos una clase como estática, no podemos crear objetos de la clase. Por ejemplo,
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();
}
}
}
En el ejemplo anterior, tenemos una clase estática Test . Hemos creado un objeto t1 de la clase Prueba .
Como no podemos hacer un objeto de la clase estática, obtenemos el siguiente error:
error CS0723: Cannot declare a variable of static type 'Test'
error CS0712: Cannot create an instance of the static class
Observe que el campo y el método de la clase estática también son estáticos porque solo podemos tener miembros estáticos dentro de la clase estática.
Nota :No podemos heredar una clase estática en C#. Por ejemplo,
static class A {
...
}
// Error Code
class B : A {
...
}
Acceso a miembros estáticos dentro de la clase
Si estamos accediendo a las variables y métodos estáticos dentro de la misma clase, podemos acceder directamente a ellos sin usar el nombre de la clase. Por ejemplo,
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();
}
}
}
Salida
25 Static method
Aquí, estamos accediendo al campo estático edad y método estático display()
sin usar el nombre de la clase.
Lenguaje C
- Clase y objeto de C#
- Modificadores de acceso de C#
- C# esta palabra clave
- Clase y método abstractos de C#
- Clase anidada de C#
- C# Clase parcial y método parcial
- Clase y método sellados de C#
- Variable estática en Java:¿Qué es el bloque estático y el método? [Ejemplo]
- Polimorfismo en C++
- Abstracción de datos en C++
- Encapsulación de datos en C++