C# konstruktory – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C# konstruktory – C / C++ – Fórum – Programujte.comC# konstruktory – C / C++ – Fórum – Programujte.com

 

Kartmen
~ Anonymní uživatel
57 příspěvků
21. 12. 2018   #1
-
0
-

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) 

Nahlásit jako SPAM
IP: 82.145.222.–
Kartmen
~ Anonymní uživatel
57 příspěvků
21. 12. 2018   #2
-
0
-

#1 Kartmen
První část už vidím, je to v sekci NET.

Nahlásit jako SPAM
IP: 82.145.222.–
BDS+3
Věrný člen
21. 12. 2018   #3
-
0
-

#1 Kartmen 

    class A
    {
        int value;
        string text;

        public A()
        {
            value = 1;
        }

        public A(string caption)
            : this() //zavolá se konstruktor bez parametru (ten vloží do value 1)
        {
            // takže nemusíš doplňovat a=1;
            text = caption;
        }
    
Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
Kartmen
~ Anonymní uživatel
57 příspěvků
21. 12. 2018   #4
-
0
-

#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); }
}
Nahlásit jako SPAM
IP: 82.145.222.–
BDS+3
Věrný člen
21. 12. 2018   #5
-
0
-

#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íš.

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
Kartmen
~ Anonymní uživatel
57 příspěvků
22. 12. 2018   #6
-
0
-

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.

Nahlásit jako SPAM
IP: 82.145.223.–
BDS+3
Věrný člen
22. 12. 2018   #7
-
0
-

#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é.

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
Kartmen
~ Anonymní uživatel
57 příspěvků
22. 12. 2018   #8
-
0
-

Hlavně že se problém vyřešil, díky.

Nahlásit jako SPAM
IP: 82.145.222.–
jerry
~ Anonymní uživatel
504 příspěvků
23. 12. 2018   #9
-
0
-

#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

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:1453:d78d:43fc:75c8...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Konstruktory — založil robin

Třída, konstruktory — založil JakeBuchar

Dědění java konstruktory — založil elix

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý