Ohne diesen Code auszuführen, identifizieren Sie bitte, welche Foo
-Methode aufgerufen wird:
class A
{
public void Foo( int n )
{
Console.WriteLine( "A::Foo" );
}
}
class B : A
{
/* beachten Sie, dass A::Foo und B::Foo überhaupt nicht zusammenhängen */
public void Foo( double n )
{
Console.WriteLine( "B::Foo" );
}
}
static void Main( string[] args )
{
B b = new B();
/* welches Foo wird gewählt? */
b.Foo( 5 );
}
Welche Methode? Und warum? Kein Mogeln, indem Sie den Code ausführen.
Ich habe dieses Rätsel im Internet gefunden; ich mag es und denke daran, es als Interviewfrage zu verwenden... Meinungen?
EDIT: Ich würde einen Bewerber nicht dafür beurteilen, wenn er dies falsch beantwortet, sondern es als Möglichkeit nutzen, eine umfassendere Diskussion über C# und CLR selbst zu eröffnen, damit ich ein gutes Verständnis der Fähigkeiten des Bewerbers erlangen kann.
Quelle: http://netpl.blogspot.com/2008/06/c-puzzle-no8-beginner.html
35 Stimmen
Wenn mich jemand fragt, werde ich sagen, du hättest die Main-Methode in einer Klasse schreiben sollen :))
0 Stimmen
Kann mir jemand erklären, warum die Basisklassenmethode aufgerufen wird, wenn wir den Parameter vom Typ int auf double (A.Foo) und von double auf int (B.Foo) ändern und den Input als double übergeben?