C# 抽象泛型父类能否自动获取子(扩展)类型?
在我的c#项目中,我有两个抽象的泛型父类,然后有多个子类继承它们。问题是我正在将子类型传递给父泛型,这会导致一些看起来很愚蠢的类和方法定义 泛型父类中是否有方法获取继承它们的类的类型?因此,与其在DTOBase中传递类型,不如声明它将是DTOBase的第一个子级的类型 父类定义C# 抽象泛型父类能否自动获取子(扩展)类型?,c#,class,generics,inheritance,C#,Class,Generics,Inheritance,在我的c#项目中,我有两个抽象的泛型父类,然后有多个子类继承它们。问题是我正在将子类型传递给父泛型,这会导致一些看起来很愚蠢的类和方法定义 泛型父类中是否有方法获取继承它们的类的类型?因此,与其在DTOBase中传递类型,不如声明它将是DTOBase的第一个子级的类型 父类定义 public abstract class DTOBase<T> : INotifyPropertyChanged, IMergeable<T> public abstract class Mo
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>
公共抽象类DTOBase:INotifyPropertyChanged,IMergeable
公共抽象类模型库:INotifyPropertyChanged、ITrackable、IMergeable
其中T:DTOBase
其中U:ModelBase
示例子类
public class MenuGroup : DTOBase<MenuGroup>
public class MenuGroup : ModelBase<DTOs.MenuGroup, MenuGroup>
public类菜单组:DTOBase
公共类菜单组:模型库
不,当你有一个类型关系,而这个关系很难用其他方式表达时,这种事情就相当普遍了。我的协议缓冲区端口中有类似的内容:
public interface IMessage<TMessage, TBuilder>
: IMessage<TMessage>, IMessageLite<TMessage, TBuilder>
where TMessage : IMessage<TMessage, TBuilder>
where TBuilder : IBuilder<TMessage, TBuilder>
公共接口IMessage
:IMessage,IMessageLite
where-TMessage:IMessage
制造商:IBuilder
这既烦人又丑陋,但它完成了任务。很抱歉,没有更好的消息告诉您。为什么需要继承类的类型?在第一个示例DTOBase中,我需要IMergable接口定义的继承类的类型。Darn。这是令人沮丧的,因为我认为编译器应该能够在编译时找出这些类型关系,而不必显式地通知它。@MalcolmO'Hare:这不是编译器的问题,而是类型系统不够丰富,无法表达这种关系。