Co spravi nasledujuci program:
Kód: Vybrat vše
public static Main(){
L1 string [] pole1 = { "helo" };
L2 object [] pole2 = pole1;
L3 pole2[0] = new Object();
Console.WriteLine(pole2[0]);
}
Zjednodusila sa otazka na implementovanie niecoho:
Kód: Vybrat vše
Interface I<T>{
T m();
}
class Foo: I<int>, I<double>{
}
spravne riesenie mohlo byt napr
Kód: Vybrat vše
class Foo: I<int>, I<double>{
double I<double>.m(){return 0;} //tu sa 'public' NEPISE
public int m() {return 0;} //tu nezabudnite 'public' ;)
}
Kód: Vybrat vše
BB<int> bb = new CC<int>();
BB<CC<int>> bbcc= new CC<CC<int>>();
Kód: Vybrat vše
Console.WriteLine(bb is BB<int>);
Console.WriteLine(bb is CC<int>);
Console.WriteLine(bbcc is CC<BB<int>>);
Console.WriteLine(bbcc is BB<CC<int>>);
Console.WriteLine(bb.GetType() == typeof(BB<int>));
Console.WriteLine(bb.GetType() == typeof(CC<int>));
Tu si treba uvedomit, ze getType ziska presny typ premennej (nezohladnuje dedicnost) a 'is' zistuje ci sa da premenna pretypovat na typ bez vyhodenia exception (teda zohladnuje dedicnost). (true,true,false,true,false,true)
Ako je to s riadkom "bbcc is CC<BB<int>>" neviem dobre vysvetlit.
Nieco o tom, co plati/neplati o strukturach.
Chytak bol, ze struktury je mozne vytvorit aj na halde (zabalene v triede).
A pre takych ako ja: struktury dedia len od interfacov a classy sa nededia od struktur a preto struktury nemaju virtualne metody.
Dalsia novinka bola, o triede streamWriter. Ten musi byt explicitne flushnuty (metoda close/flush) aby sa vyprazdnilo to co ma v buffri. Otazka bola, ci je mozne rozsirit tuto triedu tak, aby sa buffer sam flushol ked sa streamWriter finalizuje garbage collectorom.
Potom tam bolo viacero moznosti, spravna bola:
"nie, lebo finalizery sa nevykonavaju v pevnom poradi"
A na konci bola otazka suvisiaca s extension metodami.
mame kod:
Kód: Vybrat vše
class TimeSpan{
public TimeSpan(int hours, int minutes, int seconds){....}
}
...
public static void Main{
TimeSpan foo = 2.Hours();
Console.WriteLine( foo.hours);
}
jedna ze to nejde,
jedna zalozena na tom, ze int sa implicitne pretypuje na triedu a na nej sa zavola metoda
Kód: Vybrat vše
Hours(){
return new TimeSpan((int)this,0,0);
}
moznost s extension metodou, ktora vyuzivala double
moznost s extension metodou, ktora vyuzivala int - tato bola spravna
Kto si pamatate viac, pls spresnite.