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# – 如何在编译时检索通用基类的参数? (即不使用反射)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)