Programování
Pokročilé OOP
Static elementy
Statický jsou vždy přístupny i když instance není nijak declarovaná.
Jedná se všudepřístupné hodnoty , avšak s timto musíme velmi opratrně pracovat.
Jedná se všudepřístupné hodnoty , avšak s timto musíme velmi opratrně pracovat.
// Dá se zavolat
Foo.Xxx();
Foo.Value = 5;
public class Foo
{
public static int Value;
public static void Xxx()
{
}
public void Test
{
}
}
Statický konstruktor
Statický konstruktor se spouští v momentě, když vyvoláme jakoukoliv statickou
- Metodu
- Parametr
- novou instanci (new neco())
// Dá se zavolat
// všechno zavolá statický konstrukor, ale pouze jednou.
Foo.Xxx(); // zde se zavolá konstruktor
Foo.Value = 5;
public class Foo
{
public static int Value;
static Foo()
{
}
public static void Xxx()
{
}
}
Vnitřní třída
Lze definovat třídu ve třídě, avšak lze použít vně třídy a mimo třídy , za předpokladu, že je vnitřní třída public.
Umožnuje použití struktury, kterou nechceme ventilovat ven.
Umožnuje použití struktury, kterou nechceme ventilovat ven.
LinkedList list = new LinkedList();
LinkedList.Item item = new LinkedList.Item();
public class LinkedList
{
private Item first;
// Lze vidět
public class Item
{
}
// Neni vidět
private class SecureItem
{
}
}
Generika
Pokud vytváříme například list, tak jsme momentalní chvíly limitovaný pouze na to co zadáme jako typ, momentální chvíly int.
Kdybychom chtěli string, tak musime opět vytvořit to stejný, ale s jiným
Kdybychom chtěli string, tak musime opět vytvořit to stejný, ale s jiným
public class MyListInt
{
private int[] data;
private int count;
public void Add(int value)
{
this.data[this.count++] = value;
}
}
public class MyListString
{
private string[] data;
private int count;
public void Add(string value)
{
this.data[this.count++] = value;
}
}
Použití generiky
Mužeme použit něco co se jmenuje generický a umožnuje nám určit o jaký typ se bude jednat
public class MyListInt<T>
{
private T[] data;
private int count;
public void Add(T value)
{
this.data[this.count++] = value;
}
}
// mužeme mít i více
public class MyList<TKey, TValue>
// I na více mužeme definovat jejich typy
public class MyList<TKey, TValue> where TKey : class, IDisposable
where TValue : new()
// hodnotovy typ
public class MyList<T> where T : struct
// bez parametrický konstrukor
public class MyList<T> where T : new
// referenční typ
public class MyList<T> where T : class
{
private T[] data;
private int count;
public void Add(T value)
{
this.data[this.count++] = value;
}
}
// mužeme dělat i metodu, nemusíme se omezovat na classy
public static void GetNazevAnicka<T> (List<T> Value1, T Value2)
{
}