Quiz: Polymorphe Methoden und statische Bindung

30/05/2008 - 00:43 von Ivan Dolvich | Report spam
Heute wurde mir klar, was statische Bindung bedeutet. Habe einen Test
gemacht und er hat mir einen "A-HA!" gegeben. Aber ich verrate euch
nicht freiwillig was auf die Konsole kommt :) :) :)

class PolyMethods
{
class Base { }

class Derived : Base { }

static void foo(Base[] arr) { Console.WriteLine("foo(Base)"); }

static void foo(Derived[] arr) { Console.WriteLine("foo(Derived)"); }

static void bar(Base b) { Console.WriteLine("bar(Base)"); }

static void bar(Derived b) { Console.WriteLine("bar(Derived)"); }

static void baz<T>(T[] objs) where T : Base
{
foreach (T obj in objs) { bar(obj); }
}

static void Main(string[] args)
{
Console.WriteLine("*** Test 1 ***");
Base[] array1 = new Base[] { new Derived() };
Base[] array2 = new Derived[] { new Derived() };
Derived[] array3 = new Derived[] { new Derived() };

foo(array1); // a) ?
foo(array2); // b) ?
foo(array3); // c) ?

Console.WriteLine("*** Test 2 ***");
Base o1 = new Base();
Base o2 = new Derived();
Derived o3 = new Derived();

bar(o1); // d) ?
bar(o2); // e) ?
bar(o3); // f) ?

Console.WriteLine("*** Test 3 ***");
baz<Base>(array1); // g) ?
baz<Derived>(array1); // h) ?
baz<Base>(array2); // i) ?
baz<Derived>(array2); // j) ?
baz<Base>(array3); // k) ?
baz<Derived>(array3); // l) ?
}
}

Grüße, Ivan
 

Lesen sie die antworten

#1 Frank Dzaebel
31/05/2008 - 11:26 | Warnen spam
Hallo Ivan,

Console.WriteLine("*** Test 3 ***");
baz<Base>(array1); // g) ?
baz<Derived>(array1); // h) ?
baz<Base>(array2); // i) ?
baz<Derived>(array2); // j) ?
baz<Base>(array3); // k) ?
baz<Derived>(array3); // l) ?



damit kompiliert's vielleicht besser (.NET 3.5) :

Console.WriteLine("*** Test 3 ***");
baz<Base>(array1); // g)
baz<Derived>(array1.Cast<Derived>().ToArray()); // h)
baz<Base>(array2); // i)
baz<Derived>(array2.Cast<Derived>().ToArray()); // j)
baz<Base>(array3); // k)
baz<Derived>(array3); // l)


[ECMA-334: 14.5.5.1 Method invocations at C# Online.NET (CSharp-Online.NET)]
http://en.csharp-online.net/ECMA-334:_14.5.5.1_Method_invocations


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen