Statisches C#-Schlüsselwort
Statisches C#-Schlüsselwort
In diesem Tutorial lernen wir das Schlüsselwort static in C# anhand von Beispielen kennen.
In C#, wenn wir einen static
verwenden Schlüsselwort mit Klassenmembern, dann gibt es eine einzelne Kopie des Typmembers.
Und alle Objekte der Klasse teilen sich eine einzelne Kopie, anstatt einzelne Kopien zu erstellen.
Statische C#-Variablen
Wenn eine Variable deklariert ist static
, können wir über den Klassennamen auf die Variable zugreifen. Zum Beispiel
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();
}
}
}
Ausgabe
Department: Computer Science
Im obigen Beispiel haben wir eine statische Variable mit dem Namen department erstellt . Da die Variable statisch ist, haben wir den Klassennamen Student verwendet um auf die Variable zuzugreifen.
Statische Variablen vs. Instanzvariablen
In C# hat jedes Objekt einer Klasse seine eigene Kopie von Instanzvariablen. Zum Beispiel
class Student {
// instance variable
public string studentName;
}
class Program {
static void Main(string[] args) {
Student s1 = new Student();
Student s2 = new Student();
}
}
Hier sind die beiden Objekte s1 und s2 wird separate Kopien der Variablen studentName haben . Und sie unterscheiden sich voneinander.
Wenn wir jedoch eine Variable als statisch deklarieren, teilen sich alle Objekte der Klasse dieselbe statische Variable. Und wir müssen keine Objekte der Klasse erstellen, um auf die statischen Variablen zuzugreifen.
Beispiel:Statische C#-Variable vs. Instanzvariable
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();
}
}
}
Ausgabe
Name: Ram School: Programiz School Name: Shyam School: Programiz School
Im obigen Programm hat die Student-Klasse eine nicht statische Variable namens studentName und eine statische Variable namens schoolName .
Innerhalb des Programms Klasse,
s1.studentName
/s2.studentName
- ruft die nicht-statische Variable mit den Objekten s1 auf und s2 bzw.Student.schoolName
- ruft die statische Variable unter Verwendung des Klassennamens auf
Da der schoolName für alle Schüler gleich ist, ist es gut den schoolName zu machen statisch. Es spart Speicherplatz und macht das Programm effizienter.
Statische C#-Methoden
Genau wie statische Variablen können wir die statischen Methoden mit dem Klassennamen aufrufen.
class Test {
public static void display() {....}
}
class Program {
static void Main(string[] args) {
Test.display();
}
}
Hier haben wir direkt aus Program auf die statische Methode zugegriffen Klassen mit dem Klassennamen.
Wenn wir eine Methode als statisch deklarieren, teilen sich alle Objekte der Klasse dieselbe statische Methode.
Beispiel:Statische und nicht statische C#-Methoden
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();
}
}
}
Ausgabe
Non static method Static method
Im obigen Programm haben wir eine nicht statische Methode namens display1() deklariert und eine statische Methode namens display2() innerhalb der Klasse Test .
Innerhalb der Program-Klasse
t1.display1()
- Zugriff auf die nicht-statische Methode mit s1 ObjektTest.display2()
- Zugriff auf die statische Methode mit dem Klassennamen Test
Hinweis :In C# die Main Methode ist statisch. Wir können es also aufrufen, ohne das Objekt zu erstellen.
Statische C#-Klasse
Wenn wir in C# eine Klasse als statisch deklarieren, können wir keine Objekte der Klasse erstellen. Zum Beispiel
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();
}
}
}
Im obigen Beispiel haben wir eine statische Klasse Test . Wir haben ein Objekt t1 erstellt der Klasse Test .
Da wir kein Objekt der statischen Klasse erstellen können, erhalten wir die folgende Fehlermeldung:
error CS0723: Cannot declare a variable of static type 'Test'
error CS0712: Cannot create an instance of the static class
Beachten Sie, dass das Feld und die Methode der statischen Klasse ebenfalls statisch sind, da wir nur statische Mitglieder innerhalb der statischen Klasse haben können.
Hinweis :Wir können keine statische Klasse in C# erben. Zum Beispiel
static class A {
...
}
// Error Code
class B : A {
...
}
Zugriff auf statische Mitglieder innerhalb der Klasse
Wenn wir auf die statischen Variablen und Methoden innerhalb derselben Klasse zugreifen, können wir direkt darauf zugreifen, ohne den Klassennamen zu verwenden. Zum Beispiel
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();
}
}
}
Ausgabe
25 Static method
Hier greifen wir auf das statische Feld age zu und statische Methode display()
ohne den Klassennamen zu verwenden.
C Sprache
- C#-Klasse und -Objekt
- C#-Zugriffsmodifikatoren
- C# dieses Schlüsselwort
- Abstrakte C#-Klasse und -Methode
- Verschachtelte C#-Klasse
- C# Teilklasse und Teilmethode
- Versiegelte C#-Klasse und -Methode
- Statische Variable in Java:Was ist statischer Block &Methode [Beispiel]
- Polymorphismus in C++
- Datenabstraktion in C++