NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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 11 - 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
Placka03
Člen
Avatar
Placka03:12.4.2018 14:49

Existuje v C# něco jako funkce eval() v Java Scriptu? (funkce, do které zadáte kód a ona jej vykoná, např.

string prikaz = "WriteLine"
eval("Console." + prikaz + ".('ahoj')");

a výstup by byl 'ahoj').

 
Odpovědět
12.4.2018 14:49
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Placka03
pocitac770:12.4.2018 22:55

Říká se tomu reflexe, a je to hodně, hodně, hodně nečistý zacházení s jazykem, porušující kompletně veškeré bezpečností opatření OOP (alias jak se například dostat k a změnit privátní atribut), který by mělo být použito pouze v krajních případech... Na to se být tebou kouknu až budeš plně chápat aspekty onoho jazyka... (ani zde na to nejsou tutoriály)

Editováno 12.4.2018 22:56
 
Odpovědět
12.4.2018 22:55
Avatar
Odpovídá na Placka03
Michal Štěpánek:12.4.2018 22:57

A není jednodušší prostě napsat

Console.WriteLine("ahoj");

?

Odpovědět
12.4.2018 22:57
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na pocitac770
pocitac770:12.4.2018 22:59

Hlavně je to taky kvůli tomu, že pokud si toto neohlídáš, tak desktopová aplikace napáchá více škody s uživatelsky spustitelným kódem, než webová. Pokud takto chceš vykonávat příkazy, tak to udělej například přes switch, kde podle zadaného výrazu spustíš nějakou z tebou vybraných metod

 
Odpovědět
12.4.2018 22:59
Avatar
Placka03
Člen
Avatar
Odpovídá na pocitac770
Placka03:13.4.2018 15:57

Ano, ale nevím, jak by se dal switch použít v tomto případě: vytvořím si třídu s funkcí například na změnění barvy pozadí konzole. Jejím parametrem bude string barva. Budu využívat ConsoleColors. Se switchem by to vypadalo asi takto:

class Trida
{
        public void ZmenPozadi(string barva)
        {
                switch(barva)
                {
                        case "Red":
                                Console.BackgroundColor = ConsoleColors.Red;
                        break;
                        case "Green":
                                Console.BackgroundColor = ConsoleColors.Green;
                        break;
// a ještě dalších spoustu řádků kódu, z nichž každé 3 řádky by znamenaly 1 barvu.

Pokud bych ovšem použil eval, vešlo by se mi to na pár řádků:

class Trida
{
        public void ZmenPozadi(string barva)
        {
                eval("Console.BackgroundColor = ConsoleColors." + barva + ";");
        }
}

Omlouvám se, pokud tam mám nějakou chybu. Psal jsem to teď z hlavy :)

 
Odpovědět
13.4.2018 15:57
Avatar
Dušan Kovářík:27.6.2018 5:11

Skvělý tutoriál! Musím přiznat, že vlastnosti se mi na C# velice líbí. Usnadňuje to spoustu psaní a přehlednost kódu. Docela by mě zajímalo, jestli něco podobného existuje v Javě, nebo se tam ke všemu musí psát přístupové metody?

 
Odpovědět
27.6.2018 5:11
Avatar
Odpovídá na Placka03
Erik Šťastný:27.6.2018 8:18

Pokud ti jde tak moc o počet řádku, tak můžeš změnit parametr metody takto:

class Trida
{
    public void ZmenPozadi(ConsoleColor color)
    {
        Console.BackgroundColor = color;
    }
}

Případně pokud trváš na parametru string, tak můžeš převést string na ten Enum.

ConsoleColor MyStatus = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), "Red", true);

Používat eval na takovou "pitomost" opravdu nedoporučuju :)

Editováno 27.6.2018 8:21
 
Odpovědět
27.6.2018 8:18
Avatar
Placka03
Člen
Avatar
Odpovídá na Erik Šťastný
Placka03:27.6.2018 15:11

Aha, moc děkuju. Udělat to takhle mě vůbec nenapadlo :-)

 
Odpovědět
27.6.2018 15:11
Avatar
Daniel Buchar:12.3.2019 20:38

Ahoj,

je nutne zapisovat do konstruktoru pres metodu EditujStudenta, nebo muzu nechat zapis hodnot pres konstruktor(viz nize)? Popripade jake to ma vyhody, nevyhody, kdyz mohu menit vlastnosti, teda krom toho ze zmenim vsechny vlastnosti v jedne metode?

class Student
{
public string Jmeno { get; private set; }
public bool Muz { get; set; }
public int vek;
public int Vek
{
get
{
return vek;
}
set
{
vek = value;
if (vek > 17)
Plnoletost = true;
else
Plnoletost = false;
}
}
public bool Plnoletost { get; private set; }

public Student(string Jmeno, bool Muz, int Vek)
{
this.Jmeno = Jmeno;
this.Muz = Muz;
this.vek = Vek;

}
public override string ToString()
{
string pohlavi = "muz";
if (!Muz)
pohlavi = "zena";
string plnoletosString = "plnolety";
if (!Plnoletost)
plnoletostString = "nejsem plnolety";
return string.Format("Jme­nuji se {0}, jsem {1}, je mi {2}let a {3}", Jmeno, pohlavi, Vek, plnoletostString);

}
}
}

 
Odpovědět
12.3.2019 20:38
Avatar
Martin Ben
Člen
Avatar
Martin Ben:16.7.2019 12:55

Ahoj, je nutné ukládat informaci o plnoletosti do interního atributu? nebylo by lepší ji v případě potřeby vypočítat?

public int Vek { get; set; }
public bool Plnolety
{
    get
    {
        return Vek >= 18;
    }
    private set { }
}
 
Odpovědět
16.7.2019 12:55
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.