Příklady si přesně nepamatuju, ale tak aspoň nástin dnešní zkoušky. Zařadil bych ji tak možná do těžšího průměru.
klasika - velikost int [4B]
// misto 1
public class A
{
// misto 2
public int ia;
public void m(B b)
{
b.ib = 42;
ib = 42;
}
public class B : I
{
//misto 3
public int ib;
public void m(A a)
{
a.ia = 42;
ia = 42;
}
}
}
Tady bylo potřeba označit řádky, který sou špatně [ib = 42; a ia = 42;] + další otázka byla, kam a jak se má dopsat definice interfacu I, tak aby "tvořila privátní kontrakt mezi A a B" (nebo jak to tam bylo napsaný). Z možností sem vybral, že má být private a na miste 2. Myslim, že to bylo dobře, ale jistej si nejsem.
klasická otázka, co platí a neplatí pro user-defined třídy.
(4|2)^(1024^6)
příklad na enumerátor. Něco ve smyslu:
using System; using System.Collections.Generic;
static class Program { static IEnumerable<int> GetLenghts(this string[] list) { if (list == null) { throw new ArgumentException();
} foreach (string s in list) { Console.Write("x "); yield return s.Length; } } static void Main() { string[] x = { "a", "aa", "aaa" }; foreach (int i in x.GetLenghts()) { Console.WriteLine(i); break; } }}
A co tohle vypíše.
Možnosti byly něco jako, že to vyhodí runtime chybu, pak že je to závislý na platformě a .NETu, že to vypíše x x 1, x x x 1.... správná odpověď byla x 1.
Další otázka byla na vlákna. Snad ji někdo doplní. Šlo tam přibližně o tohle:
class X
{
public static volatile int a;
public static long b;
public static volatile int c;
public void T2()
{
b = -1;
System.Console.WriteLine(b);
}
public void T1()
{
a = 1;
b = 2;
c = 3;
}
}
Když pustíme T1 a T2 ve dvou vláknech, tak co se bude dít. Možnosti byly typu "a se vždy zapíše před c, b se vždy zapíše po a, atd..."
Poslední otázka byla na virt. metody.
using System;
class A
{
public virtual void m()
{
Console.WriteLine("A");
}
}
class B : A
{
public override void m()
{
Console.WriteLine("B");
}
}
class C :B
{
public override void m()
{
Console.WriteLine("C");
((A)this).m();
}
}
class Program
{
static void Main()
{
A x = new C();
x.m();
}
}
Co se vypíše? Možnosti něco jako: Jen A, Jen C, Jen A C, Jen A A, Něco jiného. //Něco jiného - bude se vypisovat C v nekonečné rekurzi až do zdechnutí na stackoverflow.
Kdyžtak mě někdo doplňte. Vše samozřejmě bez záruky :)