我写了一些代码,发现两个类(即下面的 Fish 和 Mammal)具有相同的模式,所以我决定用泛型来总结。
问题是,我需要从基类部分复制一个构造函数。
此外,这不能使用 new() 约束 (CS0304) 来解决,因为构造函数不是默认的(0 参数)构造函数。
我写这个是因为有人告诉我实现 ICloneable 不是一个好习惯。
public class OneHeart {...}
public class TwoHeart {...}
public class Animal<TyHeart> /* : ICloneable ?*/ {
public Animal(TyHeart heart) {
if(heart==null) throw new ArgumentNullException();
Heart = heart;
}
public Heart { get; set; }
}
public class Fish : Animal<OneHeart> {
public Fish(OneHeart heart) : base(heart) {}
public Fish(Fish fish) : base(fish.Heart) {} // copy ctor but no use?
}
public class Mammal : Animal<TwoHeart> {
public Mammal(TwoHeart heart, Organ lung) : base(heart) {Lungs=lung;}
public Mammal(Mammal mammal) : base(mammal.Heart) {Lungs=mammal.Lung;}
public Organ Lungs {get; set;} // Mammal-only member:)
}
// The Zoo collects animals of only one type:
public class Zoo<TyHeart, TyAnimal> : LinkedList<TyAnimal>
where TyAnimal : Animal<TyHeart> {
public Zoo() : base() {}
public Zoo(Zoo<TyHeart, TyAnimal> srcZoo) {
foreach(var animal in srcZoo) {
// CS0304 compile error:
base.AddLast(new TyAnimal(animal));
}
}
...
}
Fish 和 Mammal 是唯一从 Animal 派生的类,
我知道他们都实现了复制构造函数。
编辑:不需要深拷贝。
(类型)心脏和肺是单例的,在动物/鱼/哺乳动物之间共享。