如果不运行此代码,请确定Foo将调用哪个方法:
class A
{
public void Foo( int n )
{
Console.WriteLine( "A::Foo" );
}
}
class B : A
{
/* note that A::Foo and B::Foo are not related at all */
public void Foo( double n )
{
Console.WriteLine( "B::Foo" );
}
}
static void Main( string[] args )
{
B b = new B();
/* which Foo is chosen? */
b.Foo( 5 );
}
Run Code Online (Sandbox Code Playgroud)
哪种方法?为什么?运行代码不会作弊.
我在网上发现了这个难题; 我喜欢它,我想我会把它用作面试问题......意见?
编辑:我不会判断候选人是否错了,我会用它作为一种方式来开展关于C#和CLR本身的更全面的讨论,这样我就可以很好地理解候选人的能力.
资料来源: http ://netpl.blogspot.com/2008/06/c-puzzle-no8-beginner.html
当我读到这个问题时,我记得有人告诉过我(多年前),从装配者的角度来看,这两个操作是非常不同的:
n = 0;
n = n - n;
Run Code Online (Sandbox Code Playgroud)
这是真的,如果是的话,为什么会这样呢?
编辑:正如一些回复所指出的,我想这对于编译器优化到同一个东西来说相当容易.但我觉得有趣的是,如果编译器采用完全通用的方法,它们会有所不同.