c# – 如何在编译时检索通用基类的参数? (即不使用反射)
发布时间:2020-12-15 21:20:01 所属栏目:百科 来源:网络整理
导读:我想实现一个通用方法来从数据库中检索标头/详细信息数据: public static T RetrieveHeaderDetailT where T : Header???,new() // Where ??? means "what can I do here?"{ // ...} 以下是表示文档标题的泛型的定义: public class HeaderTDetail where TDe
我想实现一个通用方法来从数据库中检索标头/详细信息数据:
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |