Diskuze: enum uvnitř třídy nebo venku
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 14 zpráv z 14.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Vzhledem k tomu, že mé enumy obsahují i konstruktory a další metody, považuji je za plnohodnotné třídy a jako takové mají právo být v samostatném souboru.
... když je uvnitř třídy, tak se přidá navíc jen jméno třídy a tečka
to nemůžeš myslet vážně. A co ti říká Démeteřin zákon?
To máš jako u každého enumu konstruktor a metody? Asi dělám něco
špatně 
Aha, takže podle toho zákonu je to celkem jasné; mají být mimo danou třídu (pokud ten enum potřebuje i někdo jiný) nebo se pletu?
Konstruktor a další metody mám uvnitř toho enumu.
Přesně tak. Zacházej s enumem jako s třídou. Pokud ji nikdo jiný nepotřebuje, můžeš ji umístit dovnitř.
A můžu se zeptat, k čemu je dobré mít u každého enumu konstruktor a metody? Nějaký dobrý příklad?
Je to celkem jedno. Záleží na Tobě - já to teda vždycky dávám mimo třídu. Ale jestli to máš jako nějaký pomocný enum, který venku nebudeš používat tak ho můžeš nechat uvnitř (tak jako nested třídy).
Kit v C# to tuším ani nejde, maximálně přes extension metody ...
Netvrdím, že u každého enumu je potřebný konstruktor a třídy. Někdy se to však velmi dobře hodí:
public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7);
private final double mass; // in kilograms
private final double radius; // in meters
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
// universal gravitational constant (m3 kg-1 s-2)
public static final double G = 6.67300E-11;
double surfaceGravity() {
return G * mass / (radius * radius);
}
}
Edit: No nazdar. Tohle je pro Javu. Zkus si to přepsat do C#.
To je docela škoda, protože tímto způsobem se dá hezky zapouzdřit kus kódu i s relevantními konstantami a případnými výstupy, takže když vypíšu
Planet.MARS.surfaceGravity()
dostanu gravitační zrychlení na Marsu a nemusím to v jiné části programu počítat.
public class Planets
{
public class Planet
{
private int n;
public Planet(int n) { this.n = n; }
public int GetN() {return n;}
}
public static readonly Planet MARS = new Planet(20);
public static readonly Planet PLUTO = new Planet(20);
//
// TODO
//
}
Třeba nějak takto => vím, že se ti nebude líbit statika.
Zrovna tady je statika v pořádku. Jen mi to řešení připadá takové anemické, struktura by posloužila lépe.
Nebojím se statiky, ale používá se zbytečně často i tam, kde být nemá.
Zobrazeno 14 zpráv z 14.