【发布时间】:2012-02-13 03:40:44
【问题描述】:
似乎在 .NET Framework 中,当您覆盖该方法时,可选参数存在问题。下面代码的输出是: “bb” “啊” .但我期待的输出是: “bb” “bb” .是否有解决方案。我知道它可以通过方法重载来解决,但想知道这是为什么。代码在 Mono 中也能正常工作。
class Program
{
class AAA
{
public virtual void MyMethod(string s = "aaa")
{
Console.WriteLine(s);
}
public virtual void MyMethod2()
{
MyMethod();
}
}
class BBB : AAA
{
public override void MyMethod(string s = "bbb")
{
base.MyMethod(s);
}
public override void MyMethod2()
{
MyMethod();
}
}
static void Main(string[] args)
{
BBB asd = new BBB();
asd.MyMethod();
asd.MyMethod2();
}
}
【问题讨论】:
-
可选参数不好,mmkay! TBH,我什至从来没有使用过它们。
-
@leppie,这是一个非常实用的功能。在所有情况下都拒绝一个功能是不明智的。
-
这听起来像是 Mono 中的一个错误。
-
@Jon 怎么样?这里我们有一个例子,其中 outside 使用类,overridden 版本被检查为默认值,inside 类是 base 版本被检查为默认值;这是不一致的
-
“我没有说'我在所有情况下都拒绝该功能'” - 你当然做到了。 “不知道你是怎么得出这个结论的”——呃,“可选参数不好,嗯!”
标签: c# .net overriding optional-parameters