在我的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>
答案 0 :(得分:3)
不,当你有一种不能以任何其他方式表达的类型关系时,这种事情是相当普遍的。我在Protocol Buffers端口中有类似的东西:
public interface IMessage<TMessage, TBuilder>
: IMessage<TMessage>, IMessageLite<TMessage, TBuilder>
where TMessage : IMessage<TMessage, TBuilder>
where TBuilder : IBuilder<TMessage, TBuilder>
令人烦恼和丑陋,但它完成了工作。对不起,没有更好的消息。