这是我的链条:
public abstract class Item ->
public abstract class MiscItem ->
public abstract class OtherItem ->
public class TransformableOther;
在Item
中,有一个复制构造函数:
public Item (Item other)
{
// copy stuff ...
}
我想这样做:
var trans = new TransformableOther (otherItem);
当然这没用,我去了TransformableOther
尝试了:
public TransformableOther(Item other): base (other) {}
但是这种方式不起作用,当然那只是直接调用直接在上面的父母。我去了OtherItem
并做了同样的事情,所以对于它的父MiscItem
,
它不起作用。
我怎样才能实现我想要的目标? - 如果我不能,那么这个黑客是什么?
感谢。
编辑:我的不好,出于某种原因,在我的代码中我正在做base.Item(otherItem)
而不是base(otherItem)
这实际上就是我在问题中所写的内容。
答案 0 :(得分:1)
在C#中,没有办法做你想要的。基本上,您只能调用您直接继承的类的构造函数。
如果您可以控制Item
的实现,那么我认为最好的解决方法是使用虚拟克隆/复制方法而不是复制构造函数,这样即使{{{}也可以覆盖该方法1}}和MiscItem
不提供自己的实现。
答案 1 :(得分:1)
这很有效。
public abstract class Item
{
private Item other;
public Item(Item item)
{
System.Diagnostics.Debug.WriteLine("Creating Item!");
other = item;
}
public abstract class MiscItem : Item
{
public MiscItem(Item item) : base(item)
{
}
public abstract class OtherItem : MiscItem
{
public OtherItem(Item item) : base(item)
{
}
public class TransformableOther : OtherItem
{
public TransformableOther() : base(null)
{
}
public TransformableOther(Item item) : base(item)
{
}
}
}
}
}
然后你可以用
测试它 Item.MiscItem.OtherItem.TransformableOther other = new Item.MiscItem.OtherItem.TransformableOther();
var item = new Item.MiscItem.OtherItem.TransformableOther(other);