Třídy
Třída
Třída je vzor, podle kterého se objekty vytváří. Definuje jejich vlastnosti a schopnosti.
Objekt, který se vytvoří podle třídy, se nazývá
instance.
Třída je seskupení proměnných libovolného datového typu. Komunikace probíhá přes její metody a vlastnosti.
public class A
{
//proměnné
private int cislo;
protected int cislo1;
public string nazev;
//konstruktor
public A()
{
cislo = 4;
cislo1 = 8;
nazev = "nazev" ;
}
//konstruktor1
public A(string nazev, int cislo, int cislo1)
{
this.cislo = cislo;
this.cislo1 = cislo1;
this.nazev = nazev;
}
//metoda
public int secti()
{
return cislo + cislo1;
}
//vlastnost
public int Cislo
{
get { return cislo; }
set { cislo = value; }
}
}
// vytvoření instance třídy
A pokus1 = new A("nazev", 2, 5); // konstruktor1
A pokus = new A(); // konstruktor
Identifikátory
public – K proměnné je možné přistupovat zcela volně.
protected – K proměnné je možný přístup pouze „zevnitř“ třídy (v metodách třídy) nebo z odvozené třídy.
private – K proměnné je možný přístup pouze „zevnitř“ třídy.
Konstruktory
Konstruktory jsou zvláštním druhem metod, které se spouští pouze při vytváření instance třídy.
V příkladdu jsou dva konstruktory.
První z nich nemá žádné argumenty a nastavuje proměnné na předem danou hodnotu.
Druhý přijímá tři parametry, podle kterých přiřadí všem členům příslušné hodnoty.
Dvě stejně pojmenované metody se stejnými návratovými hodnotami ale s různými parametry jsou přetížené.
Metody
Existují pouze dva druhy metod, resp. tři. První je void (ta nic nevrací), druhá je s návratovou hodnotou (return) a třetí je konstruktor (jedná se také o jakousi speciální metodu, která slouží k vytvoření objektu).
int ppp = pokus.secti(); //vrátí 12
int pppp = pokus1.secti(); //vrátí 7
Vlastnosti
Umožňuji číst a nastavit privátní proměnné.
Dědičnost
Dědění je proces, jímž jeden objekt získá vlastnosti a metody jiného. Dědění odstraňuje nadbytečnost při definování
tříd se společnými vlastnostmi a metodami. Společné vlastnosti a metody se definují v základní třídě a specifické vlastnosti a metody se
uvedou v odvozených třídách. Každá třída může být potomkem pouze jedné třídy.
public class Uzivatel
{
//proměnné
public int vek;
public string jmeno;
//konstruktor
public Uzivatel(string jmeno, int vek)
{
this.jmeno = jmeno;
this.vek = vek;
}
public string spoj()
{
return jmeno + vek.ToString();
}
}
public class Adminm : Uzivatel
{ //proměnné
public string narodnost;
//konstruktor
public Adminm( string jmeno, int vek, string narodnost) : base(jmeno, vek)
{
this.narodnost = narodnost;
}
public string Vypis()
{
return spoj()+narodnost;
}
}
Uzivatel pokus = new Uzivatel("Jan", 2);
Adminm pokus1 = new Adminm("Honza", 2,"nor");
label.Text = pokus1.Vypis();
//nebo
label.Text = pokus1.spoj() + pokus1.narodnost;
Abstraktní třídy
Třídu uděláme abstraktní, když k deklaraci třídy přidáme klíčové slovo abstract.
V této třídě pak implementujeme metody, vlastnosti apod. Některé z těchto prvků třídy pak můžeme označit
také slovem abstract. Abstraktní metody ale neimplementujeme, vůbec nepíšeme tělo funkce.
Abstraktní třídu je totiž nutné nejdříve zdědit a v potomku přepsat (override) všechny abstraktní metody.
Jelikož funkčnost abstraktních metod není naimplementována, není možné abstraktní třídy instancovat (nelze vytvořit objekt tohoto typu).
Přestože abstraktní třídy nemouhou být instancovány, nic vám nebrání v definici jejich konstruktoru, poněvadž implicitní
konstruktor (konstruktor bez parametrů) je volán na všech předcích instancované třídy.
public abstract class A
{
public abstract int secti();
}
public class B :A
{
public int cislo;
public B( int cislo)
{
this.cislo = cislo;
}
public override int secti()
{
return cislo + cislo;
}
Virtuální metody
Virtuální metoda může, ale nemusí být potomkem přepsána a má tělo (třeba i prázdné).
public class A
{
public int cislo1=5;
public virtual int Secti()
{
return cislo1;
}
}
public class B :A
{
public int cislo;
public B( int cislo)
{
this.cislo = cislo;
}
public override int Secti()
{
return cislo +cislo;
}