通过继承具体类对抽象类进行类型推断

时间:2019-01-14 15:27:40

标签: c# generics inheritance abstract type-inference

我在这里想要做的是从具体继承类的类型推断抽象类的类型T。

例如,我有一个通用的抽象类:

public abstract class MyAbstract<T> where T : class {
    //Methods...
}

还有一个继承MyAbstract的继承具体类:

public class MyConcrete : MyAbstract<MyConcrete> { 
    //Methods..
}

现在,我的工作还不错,但是对于这个抽象类,我觉得它很冗长,因为它始终是继承类的类型。我知道可以对方法进行泛型类型推断(谢谢Jon Skeet http://joelabrahamsson.com/a-neat-little-type-inference-trick-with-c/),但是我似乎无法为上面的方法找到一种方法。

理想情况下,我会

//Type T on MyAbstract is inferred to be MyConcrete.
public class MyConcrete : MyAbstract {
    //Methods...
}

我想得到什么吗?

1 个答案:

答案 0 :(得分:1)

我的问题已在评论中解决。对于那些寻找,这是不可能的。

但是,我只需要基类中子类的类型信息,因此我最终在基类方法中实现了类型推断。

我的代码最终看起来像这样

public abstract class MyAbstract {
    DoSomething<T>(T caller){
        //foo
    }
}

具体来说:

public class MyConcrete : MyAbstract {
    base.DoSomething(this);
}

向JacquesB求助。