class BaseType
{
private string _label;
private int[] _values;
protected BaseType()
{
_label = "class name";
_values = new int[10];
} protected BaseType(BaseType right)
{
_label = right._label;
_values = right._values.Clone() as int[];
}
} sealed class Derived : BaseType, ICloneable
{
private double[] _dValues = new double[10]; public Derived()
{
_dValues = new double[10];
} private Derived(Derived right):base(right)
{
_dValues = right._dValues.Clone() as double[];
} public object Clone()
{
Derived rVal = new Derived(this);
return rVal;
} static void Main(string[] args)
{
Derived d = new Derived();
Derived d2 = d.Clone() as Derived;
if (d2 ==null)
{
Console.WriteLine("null");
}
}
}
为什么基类不实现IClonable接口,只通过提供一个收保护的构造函数,就可以让派生类可以拷贝基类的成员呢?
虽然d和d2的label,_values ,_dValues 都相等
在这里需要明确的就是,基类的label和values 相等的原因是因为初始值
d和d2,在实例化的时候values和values 其实都是初始值
受保护的构造方法之复制了子类的_dValues的值