c# - 抽象泛型父类可以自动获取子(扩展)类型吗?

标签 c# class generics inheritance

在我的 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/

相关文章:

class - flutter , Dart 。创建匿名类

generics - 如何为泛型 Vec<T> 的向量实现特征?

generics - typescript :从通用基类返回 "this"

c# - 在 C# 中将数组序列化为单个 XML 元素

c# - 如何在我的 C# Visual Studio 项目中添加 VC++ DLL 作为引用?

c# - 尝试获取用于访问自定义 api 的 token 时出现 MSAL 错误消息 AADSTS65005

javascript - canvasJS 通过直接传递一个对象来插入新的数据点

c# - 是否可以在没有管理员权限的情况下安装将程序集放入 GAC 的程序?

java - 如何使用同名字符串引用类

Java泛型问题