下面的代码将输出显示为“abc”。
请有人解释为什么不打印“d”
public class a
{
public void m1(a obj)
{
Console.WriteLine("a");
}
}
public class b :a
{
public void m1(b obj)
{
Console.WriteLine("b");
}
}
public class c: b
{
public void m1(c obj)
{
Console.WriteLine("c");
}
}
public class d: c
{
public void m1(d obj)
{
Console.WriteLine("d");
}
}
class MainRunning
{
static void Main(string[] args)
{
a a1 = new a();
b b1 = new b();
c c1 = new c();
d d1 = new d();
d1.m1(a1);
d1.m1(b1);
d1.m1(c1);
Console.ReadLine();
}
}
答案 0 :(得分:6)
打印d
的方法正在等待d
类型的实例作为其参数。您的调用没有将d
传递给名为m1
的方法,因此会使用其他重载。
您可以致电d1.m1(d1)
,该m1(d obj)
将在d
方法调用中解析,该调用会将{{1}}写入您的控制台。
答案 1 :(得分:5)
您有4个方法具有相同的名称但不同的参数列表。你打电话给他们三个,但不是第四个。
答案 2 :(得分:2)
这是因为你没有打电话
d1.m1(d1);
当您致电d1.m1(b1);
时,只有可以使用该参数(b1)运行的方法是b类中包含的方法。
对于你运行的三种方法中的大部分,一次只有一个类可以处理它,而这个类不是d class ,它接受不同的参数类型!!
答案 3 :(得分:1)
请参阅以下内容:
class MainRunning
{
static void Main(string[] args)
{
a a1 = new a();
b b1 = new b();
c c1 = new c();
d d1 = new d();
d1.m1(a1);
d1.m1(b1);
d1.m1(c1);
d1.m1(d1); // <== ?
Console.ReadLine();
}
}