C# Static Keyword: Static Variabelen, Methodes en Classes Beheersen
C# Static Keyword
Deze gids legt uit het static keyword in C#, met static variabelen, methodes en klassen met duidelijke, real-world voorbeelden.
In C# creëert het toepassen van het static keyword op een lid een enkele gedeelde instantie voor alle objecten van dat type. In plaats van dat elke instantie zijn eigen kopie houdt, leeft het static lid één keer per type.
Static Variabelen in C#
Wanneer een veld gedeclareerd wordt als static, kunt u het direct benaderen via de klassenaam, zonder een object aan te maken.
using System;
namespace StaticKeyword {
class Student {
// static variabele gedeeld door alle studenten
public static string department = "Computer Science";
}
class Program {
static void Main(string[] args) {
// Benader het static veld via de klassenaam
Console.WriteLine("Afdeling: " + Student.department);
Console.ReadLine();
}
}
}
Output
Afdeling: Computer Science
Het veld department wordt gedeeld door elke Student instantie, dus we refereren naar het als Student.department.
Static Variabelen vs. Instantie Variabelen
Instantievariabelen behoren tot individuele objecten, elk met een eigen kopie. Bijvoorbeeld:
class Student {
public string studentName;
}
class Program {
static void Main(string[] args) {
Student s1 = new Student();
Student s2 = new Student();
}
}
Hier hebben s1 en s2 aparte studentName velden. In tegenstelling tot een static veld is gemeenschappelijk voor alle instanties en kan worden benaderd zonder een object aan te maken.
Voorbeeld: Static vs. Instantie Variabelen
using System;
namespace StaticKeyword {
class Student {
public static string schoolName = "Programiz School"; // gedeeld
public string studentName; // uniek
}
class Program {
static void Main(string[] args) {
Student s1 = new Student();
s1.studentName = "Ram";
Console.WriteLine("Naam: " + s1.studentName); // instantie
Console.WriteLine("School: " + Student.schoolName); // static
Student s2 = new Student();
s2.studentName = "Shyam";
Console.WriteLine("Naam: " + s2.studentName);
Console.WriteLine("School: " + Student.schoolName);
Console.ReadLine();
}
}
}
Output
Naam: Ram School: Programiz School Naam: Shyam School: Programiz School
Het static veld schoolName is identiek voor alle studenten, wat het geheugenefficiënt en logisch consistent maakt.
Static Methodes in C#
Static methodes worden aangeroepen op de klasse zelf, niet op een instantie. Ze kunnen alleen andere static leden benaderen.
class Test {
public static void Display() {
// implementatie
}
}
class Program {
static void Main(string[] args) {
Test.Display();
}
}
Alle objecten van Test delen dezelfde Display methode, dus u roept het aan via de klassenaam.
Voorbeeld: Static en Non-Static Methodes
using System;
namespace StaticKeyword {
class Test {
public void Display1() {
Console.WriteLine("Non static methode");
}
public static void Display2() {
Console.WriteLine("Static methode");
}
}
class Program {
static void Main(string[] args) {
Test t1 = new Test();
t1.Display1(); // instantie aanroep
Test.Display2(); // static aanroep
Console.ReadLine();
}
}
}
Output
Non static methode Static methode
Let op: De Main methode is zelf static, wat haar toestaat te draaien zonder instantie.
Static Classes
Een static klasse kan niet geïnstantieerd worden en kan alleen static leden bevatten. Het is nuttig voor het groeperen van helper methodes.
using System;
namespace StaticKeyword {
static class Test {
static int a = 5;
static void Display() {
Console.WriteLine("Static methode");
}
static void Main(string[] args) {
// Test t1 = new Test(); // ❌ Compileerfout
Console.WriteLine(a);
Display();
}
}
}
Het proberen Test te instantiëren resulteert in compileerfouten CS0723 en CS0712, wat de static aard bevestigt.
Static klassen kunnen niet geërfd worden. Bijvoorbeeld:
static class A { /* ... */ }
// class B : A { /* ... */ } // ❌ Fout
Static Leden Benaderen Binnen de Klasse
Binnen dezelfde klasse kunt u naar static velden en methodes refereren zonder de klassenaam te prefixen.
using System;
namespace StaticKeyword {
class Test {
static int age = 25;
public static void Display() {
Console.WriteLine("Static methode");
}
static void Main(string[] args) {
Console.WriteLine(age); // directe toegang
Display(); // directe toegang
Console.ReadLine();
}
}
}
Output
25 Static methode
Hier worden age en Display gebruikt zonder ze te prefixen met Test..
C Taal
- C# Classes & Objects: Fundamenten voor Robuuste OOP
- C# Access Modifiers: Public, Private, Protected, Internal en Meer
- De C# this Keyword Onder de Loep
- C# Abstract Classes & Methods: Een Praktische Gids
- C# Geneste Classes: Definitie, Gebruik en Inheritance
- C# Partial Classes en Methods: Een Praktische Gids
- C# Sealed Classes en Methods: Wanneer en Hoe Te Gebruiken
- Polymorfisme in C++ Begrijpen: Een Praktische Gids
- Data Abstractie in C++ Beheersen: Ontwerp Vereenvoudigen met Interface-Implementatie Scheiding
- Data Encapsulatie in C++: Uw Code Beschermen
- Java Static Uitgelegd: Variabelen, Methodes en Blokken – Praktische Voorbeelden