Zkouška 27.1.2012

cre8or at 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.

  1. 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.

  2. 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.

  1. Nejaka silenost s kovarianci a kontravarianci

  2. 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.

  1. 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 :-)