相关疑难解决方法(0)

重写方法的C#可选参数

似乎在.NET Framework中,覆盖方法时可选参数存在问题.下面代码的输出是:"bbb""aaa".但我期待的输出是:"bbb""bbb".有解决方案.我知道它可以用方法重载解决,但想知道原因.此外,代码在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# overriding optional-parameters

71
推荐指数
6
解决办法
2万
查看次数

为什么输出默认值来自Base类?

为什么输出B5,有人可以解释吗?

class A
{
       public virtual void M(int x=5)
       Console.Write("A"+x);
}

class B:A
{
       public override void M(int x=6)
       Console.Write("B"+x);

}
class Program
{
       static void Main(string[] args)
        {
            A a = new B();
            a.M();
        }
}
//Output is : B5
Run Code Online (Sandbox Code Playgroud)

我希望输出为B6,但实际输出为B5。

.net c#

4
推荐指数
1
解决办法
61
查看次数

标签 统计

.net ×2

c# ×2

optional-parameters ×1

overriding ×1