Вызов конструктора в 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
конструкторы экземпляров используются для создания и инициализации любых переменных-членов экземпляра при использовании нового выражения для создания объекта класса.
таким образом, вы можете пойти только со вторым подходом.