生成引用自己的类

Mik*_*liy 1 c# generics

有没有办法让这两个类化为一体?

class Tag1{
  public Tag1 Parent{get;set;}
}

class Tag2{
  public Tag2 Parent{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

所以我会:

class Tag1 : Tag{}

class Tag2 : Tag{}
Run Code Online (Sandbox Code Playgroud)

似乎没有,但可能我错过了一些全球性的东西.

感谢Jon,我结束了以下解决方案:

class Tag1 : Tag<T> {
   public T Parent {get;set;}

  public T AddNew(){
      return new T(){Parent = (T)this;} // This works
  }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

好吧,比以前稍微麻烦一点,子类需要做更多的工作,但......

public abstract class SelfRef<T> where T : SelfRef<T>
{
    private readonly Func<T> childFactory;

    public T Parent { get; set; }

    protected SelfRef(Func<T> childFactory)
    {
        this.childFactory = childFactory;
    }

    public T AddNew()
    {
       return childFactory();
    }
}

public sealed class Ref1 : SelfRef<Ref1>
{
    public Ref1()
        : base(() => new Ref1 { Parent = this })
    {            
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这符合要求.请注意,如果您执行此操作,您将始终无法实现多层次的层次结构SelfRef,所以不要打扰:)

你可能会让子工厂接受新的父工作.基本上你真正想要的类型关系 - 那T = (the same type deriving from SelfRef<T>)- 不能用.NET泛型来表达,这就是为什么你有点麻烦.