代码之家  ›  专栏  ›  技术社区  ›  Mike Webb

在C#中使用“this()”调用重载方法的正确语法是什么?

  •  2
  • Mike Webb  · 技术社区  · 14 年前

    我可能有这个错误,但我已经看到了创建一个重载方法的方法,该方法在定义中调用自己。有点像:

    public void myFunction(int a, int b)
    {
        //Some code here
    }
    
    public void myFunction(int a) : this (a, 10)
    { }
    

    这不是正确的语法,我知道,但我找不到正确的语法任何地方由于某种原因。正确的语法是什么?

    3 回复  |  直到 14 年前
        1
  •  7
  •   James Curran    14 年前

    public void myFunction(int a, int b) 
    { 
        //Some code here 
    } 
    
    public void myFunction(int a) 
    { 
         myFunction(a, 10) ;
    } 
    

    尽管从C#4开始,您可以使用可选参数:

    public void myFunction(int a, int b = 10) 
    { 
        //Some code here 
    } 
    

    您所写的内容对于构造函数来说几乎是正确的:

    public class myClass
    {
    
        public myClass(int a, int b)
        {
            //Some code here
        }
    
        public myClass(int a) : this (a, 10)
        { }
    
    }
    
        2
  •  6
  •   Dave Swersky    14 年前

    就这么做吧:

    public void myFunction(int a, int b)
    {
        //Some code here
    }
    
    public void myFunction(int a) 
    {
        myFunction(a, 10)
    }
    

    你把重载和重写混淆了。可以从派生类调用基构造函数,如下所示:

    public MyConstructor(int foo) 
       :base (10)
    {}
    
        3
  •  0
  •   Pete    14 年前
    public class BaseClass {
         public virtual void SomeFunction(int a, int b) {}
    }
    
    public class Derived : BaseClass {
         public override SomeFunction(int a, int b) {
              base.SomeFunction(a, b * 10);
         }
    }