作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像这样的通用类:
class MyGenericClass<T> { }
另一方面,我有一个聚合器类,用于获取 MyGenericClass
的单例实例。和派生类,其中每个实例由具体类类型和参数类型标识。即 MyGenericClass<int>
不同于MyGenericClass<string>
来自 MyDerivedGenericClass<int>
;它们每个都有一个实例。
聚合器的主要成员是GetInstanceOf
方法,它将返回指定类型的单例实例。问题是我想将类型指定为泛型参数,但我找不到创建类型限制的方法“参数必须是具有任何参数类型的 MyGenericClass(或派生)类型”。简而言之,我想要这样的东西:
T GetInstanceOf<T>() where T : MyGenericClass<> //This does not compile
那么,我能做什么呢?有没有办法指定这样的限制?
编辑 GetInstanceOf<T>
方法确实返回 T,而不是 void。
最佳答案
您可能想要创建一个接口(interface),并让您的通用类实现它。 .NET 编译器将 MyGenericClass
这将允许你做这样的事情:
void GetInstanceOf<T>() where T : IMyGenericClass
您还可以使用共享基类:
void GetInstanceOf<T>() where T : MyGenericClassBase
最后,您可以尝试向您的方法添加第二个类型参数:
void GetInstanceOf<T, U>() where T: MyGenericClassBase<U>
(我不确定最后一个......我没有方便的编译器来检查它)
参见:http://msdn.microsoft.com/en-us/library/aa479859.aspx#fundamentals_topic12
关于c# - 如何将泛型类型指定为泛型方法中的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1573663/
我是一名优秀的程序员,十分优秀!