c# – 如何在编译时检索通用基类的参数? (即不使用反射)

c# – 如何在编译时检索通用基类的参数? (即不使用反射),第1张

概述我想实现一个通用方法来从数据库中检索标头/详细信息数据: public static T RetrieveHeaderDetail<T> where T : Header<???>, new() // Where ??? means "what can I do here?"{ // ...} 以下是表示文档标题的泛型的定义: public class Header<T 我想实现一个通用方法来从数据库中检索标头/详细信息数据:

public static T RetrIEveheaderDetail<T>    where T : header<???>,new()    // Where ??? means "what can I do here?"{    // ...}

以下是表示文档标题的泛型的定义:

public class header<TDetail> where TDetail : class,new(){    public List<TDetail> Details;}

以下是一些实例:

public class RequestForQuotation : header<RequestForQuotationDetail> { ... }public class Order               : header<OrderDetail>               { ... }public class Invoice             : header<InvoiceDetail>             { ... }// ..

不难证明,因为.NET不允许多重继承或“通用专门化”(这将允许header< U>来自某些其他header< V>),对于任何特定的T,存在于大多数U使得T从header< U>继承(直接或间接).此外,找到类型U是很简单的:迭代T的基类型,直到找到header< U>的实例,然后才拿出泛型的参数!不过,C#希望我指定将方法的定义更改为以下内容:

public static T RetrIEveheaderDetail<T,U>    where T : header<U>,new()    where U : class,new(){    // ...}

有没有办法解决这个问题?我知道使用Reflection是可能的,但我认为在运行时永远不能在编译时做什么是一个好习惯.

当我遇到这样的问题时,我真的非常想念C.

解决方法 不久前我问了这个问题.

Generics with Generic Parameters and Abstract class

总结

以上是内存溢出为你收集整理的c# – 如何在编译时检索通用基类的参数? (即不使用反射)全部内容,希望文章能够帮你解决c# – 如何在编译时检索通用基类的参数? (即不使用反射)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1228138.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存