繁体   English   中英

我可以从C#中同一个类的另一个构造函数调用重载的构造函数吗?

[英]Can I call an overloaded constructor from another constructor of the same class in C#?

我可以从C#中同一个类的另一个构造函数调用重载的构造函数吗?

不,你不能这样做,你可以从C#中的另一个构造函数调用构造函数的唯一地方就是在构造函数之后的“:”之后。 例如

class foo
{
    public foo(){}
    public foo(string s ) { }
    public foo (string s1, string s2) : this(s1) {....}

}

如果你的意思是你可以用C#进行ctor链接,答案是肯定的。 这个问题已经被问到了。

然而,从评论看来,似乎你真正打算问的是“我可以另一个构造函数中使用前/后处理来调用重载的构造函数吗?”
虽然C#没有这样做的语法,但你可以使用一个通用的初始化函数(就像在C ++中那样不支持ctor链接)

class A
{
  //ctor chaining
  public A() : this(0)
  {  
      Console.WriteLine("default ctor"); 
  }

  public A(int i)
  {  
      Init(i); 
  }

  // what you want
  public A(string s)
  {  
      Console.WriteLine("string ctor overload" );
      Console.WriteLine("pre-processing" );
      Init(Int32.Parse(s));
      Console.WriteLine("post-processing" );
  }

   private void Init(int i)
   {
      Console.WriteLine("int ctor {0}", i);
   }
}

编辑:根据原帖的评论,这是一个C#问题。

简答:是的,使用this关键字。

答案很长:是的,使用this关键字,这是一个例子。

class MyClass
{
   private object someData;

   public MyClass(object data)
   {
      this.someData = data;
   }

   public MyClass() : this(new object())
   {
      // Calls the previous constructor with a new object, 
      // setting someData to that object
   }
}

在C#中,无法从方法体内调用另一个构造函数。 你可以用这种方式调用一个基础构造函数:foo(args):base()如你自己所指出的那样。 您还可以在同一个类中调用另一个构造函数:foo(args):this()。

当你想在调用基础构造函数之前做某事时,似乎基类的构造依赖于某些外部事物。 如果是这样,你应该通过基础构造函数的参数,而不是通过设置基类的属性或类似的东西

暂无
暂无

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

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