У меня есть абстрактный базовый класс A:
public abstract class A : ICloneable {
public int Min { get; protected set; }
public int Max { get; protected set; }
public A(int low, int high)
{
this.Min = low;
this.Max = high;
}
//...
public object Clone()
{
return new this(this.Min, this.Max); //<-- ??
}
}
Который расширен моим классом B:
public class B : A
{
public B(int low, int high) : base(low, high) { }
//...
}
Поскольку A является абстрактным, он не может быть создан, а производный класс может. Можно ли из класса A создать новый экземпляр класса B?
Предположим, что класс A имеет много производных классов, как он узнает, какой из них нужно создать?
Что ж, я хочу создать экземпляр того же класса (или типа), что и мой текущий A.
То есть, если я вызываю метод Clone
из класса B, я хочу создать новый экземпляр B. Если я вызываю метод Clone
из класса C, я хочу создать экземпляр нового C.
Мой подход состоял в том, чтобы написать что-то вроде:
return new this(this.Min, this.Max);
Но это, похоже, не работает и не компилируется.
Можно ли это сделать в C#?
Если это не так, есть ли объяснение, чтобы я мог понять?
B
добавит еще один параметр? - person Sriram Sakthivel   schedule 06.08.2014