抽象通用父类可以自动获取子(扩展)类型吗?

时间:2011-10-17 19:32:20

标签: c# class generics inheritance

在我的c#项目中,我有两个抽象的通用父类,然后有多个继承它们的子类。问题是我将子类型传递给父泛型,并且它使得一些看起来很傻的类和方法定义。

Generic父类中是否有一种方法可以获取继承它们的类的类型?因此,不必在DTOBase中传递类型,而是声明它将是DTOBase的第一个子类型。

父类定义

public abstract class DTOBase<T> : INotifyPropertyChanged, IMergeable<T>

public abstract class ModelBase<T,U> : INotifyPropertyChanged, ITrackable, IMergeable<U> 
    where T : DTOBase<T>
    where U : ModelBase<T,U>

示例子类

 public class MenuGroup : DTOBase<MenuGroup>

public class MenuGroup : ModelBase<DTOs.MenuGroup, MenuGroup>

1 个答案:

答案 0 :(得分:3)

不,当你有一种不能以任何其他方式表达的类型关系时,这种事情是相当普遍的。我在Protocol Buffers端口中有类似的东西:

public interface IMessage<TMessage, TBuilder> 
    : IMessage<TMessage>, IMessageLite<TMessage, TBuilder>
    where TMessage : IMessage<TMessage, TBuilder>
    where TBuilder : IBuilder<TMessage, TBuilder>

令人烦恼和丑陋,但它完成了工作。对不起,没有更好的消息。