(resp. které můžete dát jako typový parametr, když je omezení T: class)
a) long
b) long[]
c) System.Func<double,double>
d) int?
e) nějaký výčtový typ
f) nějaký "sealed class" typ
g) string
Správně je long[], Func, string a sealed class.
2. Jak můžete rozšířit kód "Console.WriteLine(2.Hours().Hours)", aby se zkompiloval?
a) struct MujInt : Int32 { ...něco... }
b) class MujInt : Int32 { ...něco... }
c) static class X { public static TimeSpan Hours (this int x) { return new Timespan(x, 0,0);}}
d) static class X { public static TimeSpan Hours (this double x) { return new Timespan((int)x, 0,0);}}
Správně je jen C, protože Int32 je struktura a od struktury nelze dědit. D je špatně, protože 2 je Int32 a to, že existuje implicitní konverze neznamená, že se na doublu budou hledat extension metody.
3. Co udělá následující:
Kód: Vybrat vše
IEnumerable<int> f(string[] pole)
{
foreach(string s in pole)
{
Console.Write("x ");
yield return s.Length;
}
}
foreach(int i in f(new string[] { "a", "aa", "aaa"}))
{
Console.Write(i);
break;
}
4. Jak velká je proměnná, kterou deklarujete v nějakém .NET jazyku jako long (nemusí se jednat o c#)?
Správná odpověď: Nelze určit, protože např. v C# je to 8 bajtů, v C++/CLI 4 bajty tuším a ve VB.NET to hodí kompilátorovou chybu nejspíš.
5. Následující způsoby, jak zjistit index prvku v Listu<int>, jsou funkčně ekvivalentní. Který z nich je nejvhodnější?
a) list.FindIndex(x => x == i);
b) list.FindIndex(delegate (int x) { return x == i; });
c) list.IndexOf(i, 0, list.Count);
d) list.IndexOf(i);
Správná odpověď: D, protože A a B jsou extension metody s anonymníma funkcema a jsou pomalé, C je o trochu pomalejší než D protože, ač obě uvnitř volají stejnou metodu (Array.IndexOf tuším), tak C nejprve kontroluje, zda její argumenty jsou legální.
6. Zkompiluje se následující kód, a pokud ano, na kterém řádku vyhodí výjimku, pokud někde?
Kód: Vybrat vše
int[] pole = { 1, 2, 3 };
object[] o = pole;
o[0] = new object();
Console.WriteLine(o[0]);
7. Je možné naimplementovat tuto třídu:
Kód: Vybrat vše
interface Interf<T>
{
T m();
}
class Trida : Interf<double>, Interf<System.Single> { ... }
8. Co vytiskne následující kód?
Kód: Vybrat vše
string a = "Ahoj"
a.Replace("oj", "");
a += "!";
Console.WriteLine(a);
9. Co z následujícího je pravda o třídách?
Mohou dědit z libovolné třídy. (NE, existují sealed třídy)
Mohou dědit z libovolné struktury. (NE, od struktur nelze dědit)
Jejich instance mohou být na zásobníku (NE, jsou vždy na haldě)
Jejich instance mohou být na haldě (ANO)
Výchozí viditelnost třídy je private. (NE, normální třídy mají výchozí viditelnost internal; pouze vnitřní třídy mají výchozí viditelnost private)
Výchozí viditelnost členů třídy je private. (ANO)
Je možné, že jsem něco vynechal.