抽象方法中的C#可选参数

时间:2010-09-18 22:43:02

标签: c# interface optional-parameters

假设:

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”。但是,如果是这种情况,则可选参数抽象方法将毫无用处。但似乎仍然是讨厌的错误的良好起点。

1 个答案:

答案 0 :(得分:6)

可选参数是编译器功能,编译器只能处理编译时可用的类型信息。因此,值取自您正在操作的引用类型,而不是实际的运行时类型。在这个简单的测试用例中,可以通过静态分析找出f的实际类型,但这在实际例子中很少有用,因此没有实现。