Skuska 25.1.2010

Cílem semináře je seznámit posluchače s jazykem C#, prostředím platformy .NET a tvorbou aplikací s grafickým uživatelským rozhraním. Předpokládají se znalosti objektově orientovaného programování.
atombomb
Matfyz(ák|ačka) level I
Příspěvky: 22
Registrován: 18. 1. 2007 13:11

Skuska 25.1.2010

Příspěvek od atombomb »

Cele zadanie si nepamatam, co si ale pamatam je, ze sa menili niektore otazky.

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]);
}
spadne na L1, spadne na L2, spadne na L3, neprelozi sa, vypise "System.Object" (spadne na L3: Attempted to access an element as a type incompatible with the array)

Zjednodusila sa otazka na implementovanie niecoho:

Kód: Vybrat vše

Interface I<T>{
    T m();
}

class Foo: I<int>, I<double>{
}
mate dopisat telo triedy foo tak, aby metoda m() vzdy vracala 0:
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' ;)
}
dalej bolo nieco ako

Kód: Vybrat vše

        BB<int> bb = new CC<int>();
        BB<CC<int>> bbcc= new CC<CC<int>>();
co potom urobia nasledujuce riadky:

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>));
(moznosti boli true, false, neskompiluje sa)
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);
}
a otazka bola, ako sa ma kod doplnit aby to fungovalo a vypisalo 2 (predpoklada sa ze TimeSpan ma polozku hours verejnu). Na vyber bolo 5 moznosti:
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);
}
dalsia zalozena na tom istom, ale islo o pretypovanie na strukturu
moznost s extension metodou, ktora vyuzivala double
moznost s extension metodou, ktora vyuzivala int - tato bola spravna

Kto si pamatate viac, pls spresnite.
wladik
Matfyz(ák|ačka) level I
Příspěvky: 19
Registrován: 29. 1. 2009 13:45
Typ studia: Informatika Bc.
Bydliště: Praha
Kontaktovat uživatele:

Re: Skuska 25.1.2010

Příspěvek od wladik »

Ohledně otázky na haldy - rozhodněte o pravdivosti:
NE - Mohou mít libovolnou třídu jako předka.
NE - Mohou mít libovolnou strukturu jako předka.
ANO - Vždy mají bezparametrický konstruktor.
ANO - Jejich instance mohou být na haldě.
ANO - Jejich instance mohou být na zásobníku.
NE - Lze v nich definovat nové virtuální metod.
NE - Implicitní viditelnost jejich členů je public.

Pak byla ještě otázka
Označit všechny referenční typy

Kód: Vybrat vše

[ ] System.Int64 
[x] object
[x] List<int>
[ ] long
[x] S?[,,]
a reseni na extension methods

bylo nejak takto

Kód: Vybrat vše

static class X {
  public static System.TimeSpan Hours(this System.Int32 hour) {
     return new System.TimeSpan((int)hour, 0, 0);
  }
}
Odpovědět

Zpět na „NPRG035 Jazyk C# a platforma .NET“