Вызов конструктора в C# во второй раз

можно ли вызвать конструктор во второй раз, например:

public ClassName()
{
    Value = 10;
}

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

или это только так:

public ClassName()
{
    Reset();
}

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

3 ответов


можно вызвать конструктор много раз с помощью отражения, потому что конструктор является своего рода специальным методом, поэтому вы можете вызвать его как метод.

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

отсюда: это не так, как вы должны это делать. Если вы хотите сброс объект для некоторых настроек по умолчанию, просто сделайте какой-то помощник, частный метод для него, вызванный из конструктора также:

public ClassName()
{
    Defaults();
}

public void Reset()
{
    Defaults();
}

private void Defaults()
{
    Value = 10;
}

Почему вы хотите вызвать конструктор несколько раз? Конструктор предназначен для инициализации нового объекта, и поэтому вызывается только при создании объекта. Если вы хотите повторно использовать эту логику, вам придется поместить ее в отдельный метод и вызвать ее из конструктора. В противном случае вы должны создать новый экземпляр объекта, и присвоить той же переменной.


невозможно вызвать конструктор два раза без использования отражения, так как он вызывается только один раз для построения объекта.

с MSDN

конструкторы экземпляров используются для создания и инициализации любых переменных-членов экземпляра при использовании нового выражения для создания объекта класса.

таким образом, вы можете пойти только со вторым подходом.