NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 10 - Vlastnosti

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
nosekt
Člen
Avatar
nosekt:11.5.2014 20:34

Chápu to tedy správně, když řeknu, že vlastnosti nám ve většině případech pouze zkracují třídu o metody, které bychom museli jinak napsat pro navrácení privátních atribut?

Editováno 11.5.2014 20:34
 
Odpovědět
11.5.2014 20:34
Avatar
nosekt
Člen
Avatar
nosekt:12.5.2014 14:27

Prosím o odpověď :D

 
Odpovědět
12.5.2014 14:27
Avatar
Gramli
Tvůrce
Avatar
Odpovídá na nosekt
Gramli:12.5.2014 14:35

Vlastnosti jsou metody, které buď nastavují nebo vracejí privátní atributy, takže podle mě to chápaš správně.

Odpovědět
12.5.2014 14:35
Kdo to říká ten to je...
Avatar
danar2004
Člen
Avatar
danar2004:12.5.2014 14:57

Ahoj, nevím, jestli jsem něco nepřehlédl, ale proč se v následujícím kódu (tuším předposlední z tohohle článku) nepíší i ostatní vlastnosti (Jmeno, Muz, Plnolety) do dvou řádek, stejně jako věk (vek a Vek)? Jaký je v tom rozdíl? Je to proto, abychom případně mohli mít u věku možnost změnu odmítnout a zůstat u stávající hodnoty např. otestováním, zda se někdo nesnaží zadat nereálný věk? Díky za odpověď.

class Student
{
        public string Jmeno { get; private set; }
        public bool Muz { get; private set; }
        public bool Plnolety { get; private set; }
        private int vek;
        public int Vek
        {
                get
                {
                        return vek;
                }
                set
                {
                        vek = value;
                        // kontrola plnoletosti
                        Plnolety = true;
                        if (vek < 18)
                                Plnolety = false;
                }
        }

        ...

}
 
Odpovědět
12.5.2014 14:57
Avatar
Gramli
Tvůrce
Avatar
Odpovídá na danar2004
Gramli:12.5.2014 15:11

Přesně tak, je to proto, aby jsi mohl definovat třeba nějaké podmínky.
Ty si ty vlastnosti můžeš odřádkovat u každé té metody a připsat si tam něco co ještě potřebuješ, např:

private string jmeno
public string Jmeno
(
get{return jmeno;}
set
{
 jmeno = value;
 if(jmeno =="")
    jmeno = "neznamy";
}
)

ale pokud ti stačí proměnou jen získat:

public string Jmeno { get; private set; }
Editováno 12.5.2014 15:14
Odpovědět
12.5.2014 15:11
Kdo to říká ten to je...
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na danar2004
Jan Vargovský:12.5.2014 15:26

Ta zkrácená verze je jen kvůli zkrácení kódu. Dost vlastností nemá nějakou vnitřní logiku, tak si je napíšeš zkráceně a ušetříš pár řádků kódu. Ve výsledku se ti to stejně zkompiluje jako ta rozepsaná varianta. Tohle třeba u Javy nenajdeš, na každou vlastnost si musíš napsat 2 metody a pakt o dopadá, že napíšeš třídu, 3 datové složky + gettry/settry a máš 60 řádků v ... :)

Editováno 12.5.2014 15:26
 
Odpovědět
12.5.2014 15:26
Avatar
p.krcmarik
Člen
Avatar
p.krcmarik:24.11.2014 16:08

Nemas tam chybu v te posledni casti, kde si vyzkousime problematicky pripad ? prece kdyz je setter u muz nastavenej na private, tak tu hodnotu nemuzu zmenit, nebo jsem neco blbe pochopil ?

 
Odpovědět
24.11.2014 16:08
Avatar
Selak
Člen
Avatar
Selak:31.12.2014 22:41

public string Muz()
{
return muz;
}

chci se zeptat jestli tady není chyba měl jsem to podtrhlý, změnil jsme to na bool a bylo to v pohodě.

 
Odpovědět
31.12.2014 22:41
Avatar
Skelag
Člen
Avatar
Skelag:17.2.2015 15:49

Nechci vypadat jako někdo kdo kontroluje každé slovo ale tohle mě trošku zmátlo :)

Pokud si přejeme, aby vlastnost nešla mimo třídu měnit, označíme getter jako privátní

public string Jmeno { get; private set; }

Neměl by být privátní ten getter? 8|

 
Odpovědět
17.2.2015 15:49
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Skelag
David Hartinger:17.2.2015 15:56

Mělo tam být setter, díky, opravil jsem to :)

Odpovědět
17.2.2015 15:56
New kid back on the block with a R.I.P
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 99.