Publikoval Michal Kočí dňa 20.9.2004 o 23:24 v kategórii .Net
Ak zvyknete vytvárať a používať triedy, ktoré obsahujú iba statické metódy, potom je táto nová črta jazyka C# 2.0 určená práve pre Vás. Pri programovaní takejto triedy v C# 1.0 sa trieda zvykla označovať ako sealed, teda príznakom, že z nej nie je možné dediť a tiež sa v nej uvádzal jeden privátny bezparametrový konštruktor - aby sa z nej nemohli vytvárať inštancie.
Ak ste teda chceli naprogramovať triedu, ktorá mala jednu statickú metódu HelloWorldMessage, ktorá vracala reťazec "Hello World!", potom ste vytvorili niečo takéto:
public sealed class OldStaticClass { private OldStaticClass() { } public static string HelloWorldMessage() { return "Hello World!"; } }
Riešenie je to vcelku šikovné až na to, že sa občas môžete pomýliť a v triede vytvoriť aj nestatickú metódu. Ak však chcete mať v triede iba statické metódy, potom je pre Vás vhodnejší nový typ triedy - statická trieda. Táto je implicitne sealed, takisto v nej nemôžete mať verejný konštruktor - môžete v nej však mať statický konštruktor (static constructor). Táto trieda môže obsahovať iba statické členy a metódy, pokus o vytvorenie nestatického člena či metódy skončí chybou pri kompilácii. Vyššie uvedenú triedu by ste mohli v C# 2.0 s použitím statickej triedy vytvoriť nasledovne:
public static class NewStaticClass { public static string HelloWorldMessage() { return "Hello World!"; } }
A prikladám ešte dôkaz, že statická trieda môže obsahovať statický konštruktor:
public static class NewStaticClassWithStaticConstructor { private static string hwMessage; static NewStaticClassWithStaticConstructor() { hwMessage = "Hello World!"; } public static string HelloWorldMessage() { return hwMessage; } }
Nejedná sa o žiadnu revolučnú vec, ale je pekné, že za Vás kompiler ošetrí, že zo statickej triedy rozhodne nespravíte žiadnu inštanciu.
Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.