Lekce 3 - Atributy a metody v C# Nové
V minulé lekci, První objektová aplikace v C# - Hello object world, jsme si ukázali jak OOP funguje, vysvětlili jsme si pojmy třída a metoda. Naprogramovali jsme si naši první objektovou aplikaci.
V dnešní lekci C# si uvedeme parametry metod, naučíme se používat atributy a tím dokončíme naši první objektovou aplikaci. Nakonec si ukážeme využití komentářů.
Parametry metody
Dejme nyní naší metodě Pozdrav()
parametr
jmeno
, aby dokázala pozdravit konkrétního uživatele. Přejdeme
do souboru Zdravic.cs
a takto kód upravme:
public void Pozdrav(string jmeno) { Console.WriteLine("Ahoj uživateli {0}", jmeno); }
Vidíme, že syntaxe parametru metody je stejná jako syntaxe proměnné.
Kdybychom chtěli parametrů více, oddělujeme je čárkou. Upravíme nyní
naši metodu Main()
v souboru Program.cs
:
{CSHARP_CONSOLE} Zdravic zdravic = new Zdravic(); zdravic.Pozdrav("Karel"); zdravic.Pozdrav("Petr"); Console.ReadKey(); {/CSHARP_CONSOLE}
{CSHARP_OOP} class Zdravic { public void Pozdrav(string jmeno) { Console.WriteLine("Ahoj uživateli {0}", jmeno); } } {/CSHARP_OOP}
A výsledek:
Konzolová aplikace
Ahoj uživateli Karel
Ahoj uživateli Petr
Náš kód je nyní v metodě a my ho můžeme jednoduše pomocí parametrů volat znovu s různými parametry. Nemusíme 2x opisovat "Ahoj uživateli...". Kód budeme odteď dělit logicky do metod.
Atributy třídy
Třídě přidáme nějaký atribut, nabízí se atribut text
,
kde bude uložen text pozdravu. Atributy se definují stejně jako proměnné.
Jako u metod platí, že před ně píšeme modifikátor přístupu. Pokud
modifikátor nenapíšeme, bude atribut přístupný v rámci daného jmenného
prostoru (namespace
), ale mimo něj už nikoliv. K čemu přesně
modifikátory přístupu slouží si řekneme dále v kurzu. Upravme naši
třídu Zdravic
:
class Zdravic { public string text; public void Pozdrav(string jmeno) { Console.WriteLine("{0} {1}", text, jmeno); } }
Text nyní pochopitelně musíme nastavit vytvořené instanci v
Program.cs
:
{CSHARP_CONSOLE} Zdravic zdravic = new Zdravic(); zdravic.text = "Ahoj uživateli"; zdravic.Pozdrav("Karel"); zdravic.Pozdrav("Petr"); zdravic.text = "Vítám tě tu programátore"; zdravic.Pozdrav("Richard"); Console.ReadKey(); {/CSHARP_CONSOLE}
{CSHARP_OOP} class Zdravic { public string text; public void Pozdrav(string jmeno) { Console.WriteLine("{0} {1}", text, jmeno); } } {/CSHARP_OOP}
Výsledek:
Konzolová aplikace
Ahoj uživateli Karel
Ahoj uživateli Petr
Vítám tě tu programátore Richard
Návratová hodnota metody
Vzhledem k objektovému návrhu není nejvhodnější, aby každý objekt
ovlivňoval vstup a výstup, jak se mu zachce. Pochopitelně narážíme na
naše vypisování do konzole. Každý objekt by měl mít určitou kompetenci a
tu by neměl překračovat. Pověřme proto náš objekt pouze sestavením
pozdravu a jeho výpis si zpracujme již mimo, v našem případě v metodě
Main()
. Výhodou takto navrženého objektu je vysoká
univerzálnost a znovupoužitelnost. Objekt doposud umí jen psát do konzole,
my ho však přizpůsobíme tak, aby daná metoda text pouze vracela a aby bylo
na jeho příjemci, jak s ním naloží. Takto můžeme pozdravy ukládat do
souborů, psát na webové stránky nebo dále zpracovávat.
Jelikož chceme, aby metoda vracela hodnotu string
, změníme
její dosavadní typ void
na string
. K návratu
hodnoty použijeme příkaz return
. Příkaz return
metodu ukončí a navrátí hodnotu. Jakýkoli kód v těle metody po
return
se již neprovede! Upravme obě třídy:
Metoda Pozdrav()
v souboru Zdravic.cs
:
public string Pozdrav(string jmeno) { return String.Format("{0} {1}", text, jmeno); }
Tělo metody Main()
v souboru Program.cs
:
{CSHARP_CONSOLE} Zdravic zdravic = new Zdravic(); zdravic.text = "Ahoj uživateli"; Console.WriteLine(zdravic.Pozdrav("Karel")); Console.WriteLine(zdravic.Pozdrav("Petr")); zdravic.text = "Vítám tě tu programátore"; Console.WriteLine(zdravic.Pozdrav("Richard")); Console.ReadKey(); {/CSHARP_CONSOLE}
{CSHARP_OOP} class Zdravic { public string text; public string Pozdrav(string jmeno) { return String.Format("{0} {1}", text, jmeno); } } {/CSHARP_OOP}
Nyní je náš kód napsaný dle dobrých praktik.
Komentáře
Ještě naši třídu okomentujme, jak se sluší a patří. Komentáře
budeme psát nad název třídy a nad název každého atributu a metody. K
jejich zápisu použijeme trojlomítko ///
, IDE nám poté
vygeneruje XML, do kterého vše popíšeme. Vyplatí se nám to ve chvíli, kdy
na třídě používáme nějakou metodu, její popis se nám poté zobrazí v
našeptávači. Zdokumentovaná třída může vypadat např. takto:
/// <summary> /// Třída reprezentuje zdravič, který slouží ke zdravení uživatelů /// </summary> class Zdravic { /// <summary> /// Text pozdravu /// </summary> public string text; /// <summary> /// Pozdraví uživatele textem pozdravu a jeho jménem /// </summary> /// <param name="jmeno">Jméno uživatele</param> /// <returns>Text s pozdravem</returns> public string Pozdrav(string jmeno) { return String.Format("{0} {1}", text, jmeno); } }
U metody Pozdrav()
nám prostředí IDE vygenerovalo komentář
s XML dokumentačními tagy. Používá se zde <param>
následovaný názvem parametru jmeno
. Tento tag slouží k
uvedení popisu, který se vztahuje k danému parametru jmeno
(popis může pokračovat i na dalších řádcích pro lepší přehlednost).
Vzhledem k tomu, že metoda může mít více parametrů, umožňuje tento
přístup přehledně a jednoznačně popsat každý z nich zvlášť. Dále byl
vygenerován tag <returns>
, který slouží k popisu
návratové hodnoty metody – tedy toho, co metoda vrací.
Klikneme kurzorem na metodu Pozdrav()
v metodě
Main()
a IDE nám opravdu popisky zobrazí:

A jsme u konce. Námi napsaný program má již nějakou úroveň, i když vlastně nic nedělá. Za úkol máte předělat si naši konzolovou kalkulačku do objektů. A teď už můžeme začít pracovat na naší aréně.
V následujícím cvičení, Řešené úlohy k 1.-3. lekci OOP v C# .NET, si procvičíme nabyté zkušenosti z předchozích lekcí.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 0x (37.42 kB)
Aplikace je včetně zdrojových kódů v jazyce C#