繁体   English   中英

重写方法中的默认参数值

[英]default parameter value in overridden methods

在下面的代码中,对Method2的调用接收Value参数为False,即使基类根本没有声明参数的默认值,派生类声明True为默认值。
可以认为(如在此类似示例中所做的那样: 在重写方法上使用C#可选参数 )编译器首先使用基类的方法声明(这是正确的,因为可以通过使用this.前缀调用Method1来更改此行为this. ),但在这种情况下,基数根本不会声明默认值。
对此有合理的解释吗?

using System;

class Base
{
    public virtual bool Method1(bool Value) { return true; }
    public virtual bool Method2(bool Value) { return true; }
}

class Derived : Base
{
    public override bool Method1(bool Value = true)
    {
        return Value;
    }

    public override bool Method2(bool Value = true)
    {
        return Method1();
    }
}

class Program
{
    static void Main(string[] args)
    {
        Derived a = new Derived();
        Console.WriteLine("Call to Method1, expected: True, got: {0}", a.Method1());
        Console.WriteLine("Call to Method2, expected: True, got: {0}", a.Method2());
    }
}

输出:

Call to Method1, expected: True, got: True
Call to Method2, expected: True, got: False

看起来这是一种bug。

以下是你们正在谈论的链接,我认为它来自今年早些时候:

重写方法的C#可选参数

看来你的问题与另一个问题有关,这可能对你有所帮助: 继承可选参数基本方法的歧义

我刚刚安装了Visual Studio 2012 RTM,即使在为Framework 3.5或2.0编译时,相同的代码也按预期工作。 显然这是一个编译器问题,而不是.Net Framework 1,并且已在新版本的C#编译器中得到修复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM