# Zkouška 27.1.2012

<{ForumPost(poster="cre8or", timestamp=2012-01-27 17:45:55)}>
1) Jaky vystup da nasledujici kod:

    class Prg {
            private static Func<double, Func<double, double>> Add(int c) {
                return x => y => x + y++ + (c *= 2); 
            }
    
            public static void Main(string[] args) {
                int a = 1;
                int b = 100;
                var F = Add(2);
                var G = F(a);
                G(b);
                Console.WriteLine(G(b));
            }   
        }
    

2) Jakeho typu bude promenna G z predchoziho kodu?  
  
3) Jaky placeholder typ lze dosadit do nasledujiciho kodu?

    class X<T> where T : struct { }
    

Byly tam nejaky moznosti, obecne odpoved zni: jakykoli hodnotovy typ.  
  
4) Assembly a.exe psana v managed C# a prelozena jako AnyCPU, assembly b.dll psana v managed C# a prelozena jako x86, assembly c.dll psana v C++. Exe se odkazuje na b.dll, ktere se odkazuje pres DllImport na c.dll. Jak se musi prelozit c.dll, aby to slo spustit pod x64?  
Odpoved: AnyCPU nebo x64.  
  
5) Ktera z nasledujicich moznosti by byla idealni doplnit misto ???? :

    class Profile {
            public static Profile CreateProfile(string name) {
                Profile profile = new Profile();
                StreamReader reader;
                try {
                    reader = new StreamReader(name + ".profile");
                    ...
                } catch (IOException ex) {
                    Debug.Print("...");
                    ????????
                }
                return profile;
            }
        }
    

 a) throw new ArgumentException("...")  
 b) throw new ArgumentException("...",ex)  
 c) throw new IOException()  
 d) throw new IOException("...")  
 e) throw new IOException("...",ex)  
 f) throw ex;  
 g) throw;  
Dal jsem (b), ale opravdu nevim.  
  
6) Nejaka silenost s kovarianci a kontravarianci  
  
7) Jaka je velikost promenne p v nasledujicim kodu?

    Func<string, int> p = int.Parse;
    

Odpoved: zavisi to na platforme.  
  
8 ) Jakeho typu je promenna x?

    class Prg {
            private static T Value<T>(T a, T b) where T : IComparable<T> {
                return a.CompareTo(b) < 0 ? a : b; 
            }
    
            public static void Main(string[] args) {
                var x = Value(5f, 6f);
            }   
        }
    

Odpoved: float.  
  
9) Metody T1 a T2 se spusti ve dvou vlaknech, vyberte pravdiva tvrzeni:

    class Prg {
            private volatile int a, c;
            private int b;
    
            public void T1() {
                a = 1;
                b = 2;
                c = 3;
            }
    
            public void T2() {
                b = -1;
                Console.WriteLine(b);
            }  
        }
    

a) V T1 se do a vzdy zapise driv nez do c  
b) V T1 se do b vzdy zapise driv nez do c  
c) V T1 se do b vzdy zapise pozdeji nez do a  
d) T2 muze vypsat -1  
e) T2 muze vypsat 2  
f) T2 muze vypsat 0  
Pak jeste nejaky dalsi moznosti, ale ty si nepamatuju. Vybral jsem a,b,d,e.  
  
Vsechno je samozrejme bez zaruky, obvzlast odpovedi :-)
<{/ForumPost}>

