假设:
interface IFoo
{
void Print(string text = "abc");
}
class Bar : IFoo
{
public void Print(string text = "def")
{
Console.WriteLine(text);
}
}
class Program
{
static void Main(string[] args)
{
Bar b = new Bar();
b.Print();
IFoo f = b as IFoo;
f.Print();
}
}
输出结果为:
def
abc
只是我还是这有点奇怪?最初我在两种情况下都期待“def”。但是,如果是这种情况,则可选参数抽象方法将毫无用处。但似乎仍然是讨厌的错误的良好起点。
答案 0 :(得分:6)
可选参数是编译器功能,编译器只能处理编译时可用的类型信息。因此,值取自您正在操作的引用类型,而不是实际的运行时类型。在这个简单的测试用例中,可以通过静态分析找出f
的实际类型,但这在实际例子中很少有用,因此没有实现。