在我的 C# 项目中,我有两个抽象通用父类,它们有多个继承它们的子类。问题是我将子类型传递给父泛型,这导致了一些看起来很愚蠢的类和方法定义。
通用父类中有没有办法获取继承它们的类的类型?因此,不必在 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>
最佳答案
不,当您具有无法轻松以任何其他方式表达的类型关系时,这种情况相当常见。我的 Protocol Buffers 端口中有类似的东西:
public interface IMessage<TMessage, TBuilder>
: IMessage<TMessage>, IMessageLite<TMessage, TBuilder>
where TMessage : IMessage<TMessage, TBuilder>
where TBuilder : IBuilder<TMessage, TBuilder>
这很烦人而且丑陋,但它可以完成工作。很抱歉没有给您带来更好的消息。
关于c# - 抽象泛型父类可以自动获取子(扩展)类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7798582/