Имам своя абстрактен базов клас 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