有没有办法让这两个类化为一体?
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)
好吧,比以前稍微麻烦一点,子类需要做更多的工作,但......
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泛型来表达,这就是为什么你有点麻烦.