Diskuze: Začátečnická
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tohle je hodně učebnicový příklad. Vidíš pouze a jen to, co ten interface implementuje. Kdybys měl třeba interface, který má v sobě metodu, která ti vrátí soubor. Pak máš několik možností jak ho získat, stáhnout z internetu, najít ho na disku, vytvořit nějaký mock, ... Tyhle všechny věci by sis nadefinoval do vlastních tříd, které by implementovali ten interface. Pak by si měl nějakou fasádu (návrhový vzor), který by ti vrátil instanci podle podmínek, které jsou. Poprvé potřebuješ ten soubor a zároveň ti funguje internet? Stáhneš z netu. Poprvé potřebuješ ten soubor, ale nejde ti internet? Namockuješ ho. Už jsi někdy stahoval ten soubor? Najdeš ho na disku.
Tohle taky není moc šťastný případ, ale třeba pochytíš tu podstatu interfacu. Jednoduše komunikuješ skrz ten jeden kanál, i když ani nemusíš vědět co za konkrétní instanci v něm je. Jediné co jistě víš, že umí vše co ty potřebuješ.
Dává to možnost použít interface v případech, kde nepotřebuješ znát přesný typ proměnné. Dám příklad, představ si, že máš třídu, která dokáže říct objektům, kde se mají vykreslit, ale už je jí jedno, jaký objekt se vykreslí. Dejme tomu, že vykreslovatelné objekty budou obdelník a kruh. Kruh potřebuje vědět poloměr, zatímco obdelník potřebuje vědět svou výšku a šířku. Ale oba objekty jdou vykreslit, tedy budou mít společnou metodu vykresli(kde). V původní třídě (ta co udává, kam se mají objekty vykreslit), poté nepotřebuješ vědět, co se vykresluje, jen řekneš kam, ale zároveň ty objektu potřebuješ někam uložit, a společným jmenovatelem je právě ono rozhraní (interface).
interface IObjektyJdouciVykreslit
{
public void Vykresli(kde);
}
class Ctverec : IObjektyJdouciVykreslit
{
public int vyska;
public int sirka;
public void Vykresli(kde) { /* vykresleni obdelniku */ }
}
class Kruh : IObjektyJdouciVykreslit
{
public int polomer;
public void Vykresli(kde) { /* vykresleni kruhu */ }
}
class TridaKteraVykresluje
{
public IIObjektyJdouciVykreslit[] ObjektyKVykresleni;
public void VykresliVsechnyObjekty()
{
//tady je ta zásadní část, nepotřebuješ vědět co je to za objekt
//pouze jej chceš vykreslit
foreach(IObjektyJdouciVykreslit ObjektKVykresleni in ObjektyKVykresleni)
{
/* Zjisteni, kam se objekt vykresli */
ObjektKVykresleni.Vykresli(kde)
//jednou se muze vkyreslit obdelnik, podruhe kruh
//ale tuto tridu uz nezajima co se vykresli, pouze kde
}
}
}
Já myslím, že chápu podstatu Interfacu , já jsem právě u toho ted narazil u návrhového vzoru, který řešil různé verze uložených dat a přes jeden interface se k různě uloženým datům dalo přistupovat. Tuším, že to má jméno Iterator.
Celkově by vlastně šlo použít reflexe a dynamicky to přetypovávat?
Mě spíše prostě o to, že vlastně ten Objekt Interface si sebou nese všechny "data" té třídy a nejde se k nim dostat dokud se to nepřetypuje.
Vím, že tomu hodně rozumíš , je dobré používat NamedPipe pro předávání inforamcí mezi Service a aplikací ? Máš s tím zkušenosit?
Rozumím, děkuji za napsání, já se to snažím hodně používat, ono se to dneska i chce, jenom mě zarazilo to, že to z toho nejde něják vydolovat nebo jak bych to řekl . Že v debagu to vidíš, jak to má nějáké proměné a nemůžeš se na ně odkázat, možná jsem tu otázku napsal blbě, ale zase když si to někdo přečte, tak díky Tobě bude mít krásnou ukázku, jak fungují interface
Zobrazeno 5 zpráv z 5.