c# - 在覆盖基本方法时,为什么默认参数不能正常工作?

标签 c# arguments

<分区>

Possible Duplicate:
C# optional parameters on overridden methods

using System;
namespace Apple
{
    class A
    { 
        public virtual void Func(int a=4){
            Console.WriteLine(" A Class: "+a);
        }
    }
    class B : A
    {
        public override void Func(int a = 12)
        {
            Console.WriteLine(" B Class: "+ a);
        }
    }

    public class Program
    {
        static void Main(string[] args)
        {
            A ob = new B();
            ob.Func();
            Console.ReadLine();
        }
    }
}
// Output: B Class: 4

最佳答案

编译时填入默认参数,代码通过基类引用一个变量ob。正如预期的那样,虚拟方法覆盖在运行时起作用。您可以使用 overload 方法达到预期的效果:

class A 
{
   public void Func(int value) 
   {

   }

   public virtual void Func() 
   {
        Func(4);
   }
}

class B: A
{
   public override void Func() 
   {
        Func(12);
   }
}

关于c# - 在覆盖基本方法时,为什么默认参数不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14050108/

相关文章:

c - 使用 execvp() 的问题

c# - 依赖注入(inject)机制以提供通用服务接口(interface)的最具体实现

c# - Visual Studio 设计时属性 - 表单列表下拉列表

c# - 禁用天数 : 5 days after current date on Calendar

c# - Vector3 的纬度和经度未在 3D 球体上对齐

function - "Parameter"与 "Argument"

c# - 在 excel xml 中设置日期单元格格式

c pthread_create 字符串参数

java - 如何加载方法参数中给出的名称的枚举?

iphone - 在 addTarget 中向选择器添加参数