V C# a dalších objektově orientovaných jazycích se členy tříd (tj. proměnné, metody, vlastnosti, události) dělí podle toho, zda jsou vázány na konkrétní instanci třídy, nebo na samotnou třídu jako typ.
Dle toho je lze rozdělit na:
instanční (instance) kontext
statický (static) kontext
Instanční kontext
Instanční člen:
patří konkrétnímu objektu (instanci třídy)
existuje tedy tolikrát, kolikrát je v paměti vytvořena instanci třídy
vyžaduje existující objekt, aby šla použít
public class Car{ public string Color; public void Drive() { Console.WriteLine("Auto jede."); }}
Ukázka použití:
var myCar = new Car();myCar.Color = "Red";myCar.Drive();
Color a Drive jsou instanční členy → lze je volat až na objektu
Klíčové slovo this
Slouží pro explicitní přístup ke konkrétní instanci.
public class Person{ private string name; public Person(string name) { this.name = name; }}
Statický kontext
Statický člen (proměnná, metoda, vlastnost):
patří třídě jako takové, ne konkrétní instanci
existuje v paměti pouze jednou
může být použit i bez vytvoření instance třídy
Pro označení, že člen je statický se využívá klíčové slovo static.
public class MathUtils{ public static double Pi = 3.14159; public static double Square(double x) { return x * x; }}
Ukázka použití:
double area = MathUtils.Pi * MathUtils.Square(5);Console.WriteLine(area);
k Pi nebo Square se přistupuje přímo přes název třídy
Používání static
Statické členy mohou přistupovat pouze ke statickým členům. Instanční členy mohou přistupovat jak k instančním, tak ke statickým členům.
Statická třída
Třída, která nemůže být nikdy instancována a může obsahovat pouze statické členy.
public static class Helper{ public static void PrintHello() { Console.WriteLine("Hello!"); }}
Ukázka použití:
Helper.PrintHello();var helper = new Helper(); // Chyba - nelze
Ukázka kombinace
public class Car{ public string Color; // instanční field public static int TotalCars; // statický field public void Paint(string color) { Color = color; // lze používat instanční field TotalCars++; // lze používat statický field } public static void ShowTotal() { Console.WriteLine(TotalCars); Color = "red"; // chyba! Nelze přistupovat k instančnímu fieldu ze statické metody }}
Ukázka použití:
Car.ShowTotal(); // statická metoda bez instancevar car1 = new Car();car1.Paint("Blue");