如何在类中调用构造函数?

时间:2012-01-04 16:25:16

标签: c#

我想在类中调用构造函数,如:     公共类Myclass(){

   public MyClass(){
      //......
   }

   public MyClass(int id):this(){
      //......
   }

   private void Reset(){
      //.....
      this = new MyClass(id);    //here I want to call constructor
      //......
   }
}

但它不起作用。是否有可能,如果可以,我该怎么做?

5 个答案:

答案 0 :(得分:15)

简单回答:你不能。

答案稍微复杂一点:将初始化逻辑移动到可以从构造函数和Reset()方法调用的单独方法中:

public class MyClass
{
    public int? Id { get; }

    public MyClass()
    {
        Initialize();
    }

    public MyClass(int id)
    {
        Initialize(id);
    }

    public Reset()
    {
        Initialize();
    }

    private Initialize(int? id = null)
    {
        // initialize values here instead of the constructor
        Id = id;
    }
}

答案 1 :(得分:12)

你做不到。但你可以做的是将构造函数逻辑拆分为Initialize方法,然后重置可以调用。

   public MyClass(){
   //......
   }

   public MyClass(int id):this(){
      Initialize(id);
   }

   private void Initialize(int id){
   //....
   }

   private void Reset(){
      //.....
      Initialize(id);
      //......
   }
}

答案 2 :(得分:3)

不,这是不可能的。你无法分配给它。

然而,您可以让Reset()返回MyClass的新实例,以便来电者代码可以说:

public class MyClass
{
    public MyClass Reset()
    {
        return new MyClass();
    }
}

MyClass c = new MyClass();
c = c.Reset();

或者您可以实现Reset方法,以便将所有字段重新初始化为默认值。

答案 3 :(得分:2)

可以在你的类中调用你的类的构造函数(实际上这通常用工厂方法完成):

public class MyClass
{
    public static MyClass Create()
    {
        return new MyClass();   
    }
}

但是你不能改变类中this引用的值。您应该使用“Reset()”方法将字段设置回默认值。

答案 4 :(得分:1)

在课堂上你不能重新分配this(虽然值得注意的是在一个结构中它是完全合法的)。但问题是,是否。我假设您的目标是将所有字段值设置为特定状态,因此其他人已经说过您可以让您的Reset方法返回一个新实例,或者您可以将您的逻辑分解为Clear()方法并调用该方法代替。