抽象泛型父类可以自动获得子(扩展)类型吗?

本文关键字:扩展 类型 父类 泛型 抽象 | 更新日期: 2023-09-27 18:11:25

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

是否有一种方法在泛型父类中获得继承它们的类的类型?因此,不必在DTOBase中传递type,而是将其声明为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>

抽象泛型父类可以自动获得子(扩展)类型吗?

不,当你有一个类型关系,不能轻易地用其他方式表示时,这种事情是相当常见的。我在我的协议缓冲区端口有类似的东西:

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

这是恼人和丑陋的,但它可以完成工作。很抱歉没有更好的消息。