Nějak tu nevidím forum C#, tak snad se to píše sem.
Mám dotaz na konstruktory... jaký je dotaz mezi těmi co jsem napsal níže? Nebo jaký důvod je dávat tam ten druhý konstruktor this()?
public Trida(int cislo) :this()
public Trida(int cislo)
Nějak tu nevidím forum C#, tak snad se to píše sem.
Mám dotaz na konstruktory... jaký je dotaz mezi těmi co jsem napsal níže? Nebo jaký důvod je dávat tam ten druhý konstruktor this()?
public Trida(int cislo) :this()
public Trida(int cislo)
#3 BDS
Díky. V tom příkladě mi to dává smysl, ale co tady?
public struct Money : IComparable<Money>
{
public Money(decimal value) : this() { Value = value; }
public decimal Value { get; private set; }
public int CompareTo(Money other) { return Value.CompareTo(other.Value); }
}
#4 Kartmen
to tam musíš dát, protože ve struktuře musíš inicializovat vlastnost (Value).
O to se stará ten výchozí bezparam. konstruktor struktury.
Kdyby tam vlastnost nebyla, tak to tam mít nemusíš:
public struct Money : IComparable<Money>
{
public Money(decimal value) { Value = value; }
public decimal Value;
public int CompareTo(Money other) { return Value.CompareTo(other.Value); }
}
U třídy to řešit nemusíš.
Já jen, že bez toho ": this()" je výsledek stejný a kompilátoru to také nevadí.
public struct Money2 : IComparable<Money2>
{
public Money2(decimal value) { Value = value; }
public decimal Value { get; private set; }
public int CompareTo(Money2 other) { return Value.CompareTo(other.Value); }
}
Druhý dotaz je, že v tom tvém příkladě z třídy je bezparametrický konstruktor definován a tak proč ho nezavolat, proč se ale tady volá konstruktor, který definován není? Tedy píšeš, že ve struktuře se vlastnost musí inicializovat, ale to udělá i ten parametrický konstruktor. Nějak si nedokážu představit, co udělá ten prázdný konstruktor, nebo čím vlastnost inicializuje.
#6 Kartmen
takže jsem to hledal na netu a zjistil jsem, že po novu volat prázdný konstruktor není potřeba. Muselo se to dělat u starších kompilátorů (minimálně do VS 2013), ten by ohlásil chybu a zkompilovat by to nešlo. odkaz
Mimo to u struktur bezparam. konstruktor je v podstatě definován vždy, jen je skrytý a nelze jej přepsat. Co dělá přesně nevím.
Omlouvám se, že jsem nevěděl, že už to mají u nových verzí VS ošetřené.
#7 BDS
tomu se řiká default constructor a volat se nemusí ale muže být deklarován i definován
konstruktoru obvykle předáváš parametry pokud je to nutné jinak je výhodnější zapsat default a iniciovat tam nezbytné parametry a pak klidně mužeš volat další metody
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku