【发布时间】:2014-08-15 02:33:23
【问题描述】:
这是基于另一个我非常喜欢的关于多态性的 SO 问题。所以我玩弄它并修改它以理解它。但后来它扰乱了我对多态的理解。
我在一个类中创建了一个接口,创建了一个类“A”并实现了接口方法。我还创建了另一个扩展“A”的类“B”。还有另一个扩展“B”的“C”类。
当你运行它时,输出是:
BA-> AEP
注意BA-> 部分来自B : A 类,而AEP 是A : E 中不同方法的默认参数
我在做的时候怎么调用了两个方法
`A instance = new C();
Console.WriteLine(instance.GetName());`
为什么?
class Program
{
interface E
{
string GetName(string s);
}
public class A : E
{
public virtual string GetName(string s="AEP")
{
return s;
}
}
public class B : A
{
public override string GetName(string s="BAP")
{
return "BA-> " + s;
}
}
public class C : B
{
public new string GetName()
{
return "CB->";
}
}
static void Main()
{
A instance = new C();
Console.WriteLine(instance.GetName());
Console.ReadLine();
}
}
【问题讨论】:
-
把
return s改成return s + "bla",你会发现它只是默认参数 -
这基本上是 2 个问题的重复 - 一个 C# optional parameters on overridden methods 涵盖了为什么显示“AEP”,C# keyword usage virtual+override vs. new 解释了为什么根本不调用
C.GetName(因此是“BA->”部分输出)。如果这些链接不足以澄清问题,请发表评论。 -
@Zuzlx 因为你从不在你的
Main中使用B。 -
是的。谢谢大家!
标签: c# polymorphism