第二次在c#中调用构造函数

时间:2014-12-09 13:40:04

标签: c# constructor

是否可以再次调用构造函数,如下所示:

public ClassName()
{
    Value = 10;
}

public void Reset()
{
    // Reset
    ClassName();
}

或者这是唯一的方法:

public ClassName()
{
    Reset();
}

public void Reset()
{
    // Reset
    Value = 10;
}

3 个答案:

答案 0 :(得分:7)

可以使用Reflection多次调用构造函数,因为构造函数是一种特殊的方法,因此可以将其称为方法。

public void Reset()
{
    this.GetType().GetConstructor(Type.EmptyTypes).Invoke(this, new object[] { });
}

HENCE 这不是你应该怎么做。如果你想重置对象到一些默认设置,只需为它做一些帮助,私有方法,也从构造函数调用:

public ClassName()
{
    Defaults();
}

public void Reset()
{
    Defaults();
}

private void Defaults()
{
    Value = 10;
}

答案 1 :(得分:3)

为什么要多次调用构造函数?构造函数用于初始化新对象,因此仅在创建对象时调用。 如果您想重新使用此逻辑,则必须将其放入单独的方法并从构造函数中调用它。否则,您应该创建对象的新实例,并将其分配给同一个变量。

答案 2 :(得分:3)

在不使用反射的情况下调用构造函数两次是不可能的,因为它只调用一次来构造对象。

来自MSDN

  

当您使用新表达式创建类的对象时,实例构造函数用于创建和初始化任何实例成员变量。

所以你只能采用第二种方法。