这是我的锁链:

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),这实际上是我在问题中写的。

最佳答案

这可行。

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);

关于c# - 我可以在长继承链中为子类调用顶级构造函数吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17969005/

10-10 18:16