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

本文关键字:调用 构造函数 第二次 | 更新日期: 2023-09-27 18:33:38

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

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

或者这是唯一的方法:

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

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

使用 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;
}

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

不使用反射就不可能调用构造函数两次,因为它只调用一次来构造对象。

来自 MSDN

实例

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

所以你只能选择第二种方法。