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.

Člen

Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
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.