C#能否利用隐式嵌套泛型参数?
我有一个非常简单的设计:C#能否利用隐式嵌套泛型参数?,c#,.net,generics,interface,C#,.net,Generics,Interface,我有一个非常简单的设计: 带有单个通用参数的通用接口IElement: interface IElement<T> { } 以下是我能做的: interface ISource<TElem, T> where TElem : IElement<T> { T GetSomething(); } class IntegersSource : ISource<IElement<int>, int> { publi
- 带有单个通用参数的通用接口
:IElement
以下是我能做的:interface IElement<T> { }
我试过:interface ISource<TElem, T> where TElem : IElement<T> { T GetSomething(); } class IntegersSource : ISource<IElement<int>, int> { public int GetSomething() { return 1; } }
interface ISource<TElem> where TElem : IElement<T> { T GetSomething(); }
但是编译器对这种语法不满意 我担心我错过了一些明显的东西,但是什么呢接口源 电话:IELENT在哪里 { 得不到某物; }
谢谢你的见解。那是行不通的。图像您拥有以下类:class MultiElement : IElement<int>, IElement<double> { // explicit interface implementations of IElement<int> and IElement<double> here. }
类多元素:IELENT,IELENT { //这里是IElement和IElement的显式接口实现。 }
现在,当我声明一个
时,什么应该被推断为类MySource:isoource
?不幸的是,这是不可能的。我可以想象这样的语法:T
interface ISource<TElem<T>> where TElem : IElement<T> { T GetSomething(); }
以及相应的用法,如:接口源 电话:IELENT在哪里 { 得不到某物; }
class IntegersSource : ISource<IElement<int>>
即使您必须明确说明编译器可以在何处使用“嵌套”类型参数(请参阅Heinzi针对特定情况的回答)。您所需的格式:类整数来源:ISource
class IntegersSource : ISource<IElement<int>> { public int GetSomething() { return 1; } }
将通用参数提供给ISource-“TElem”-作为类整数来源:ISource { 公共int GetSomething() { 返回1; } }
IElement
它的“int”部分随后被埋入闭合的类型定义中。虽然您可以阅读,但编译器不知道IntegerSource实现中的int。编译器如何知道您上一个列表中的
是什么?您真的需要T
?tele
内部的IElement
实现对您来说还不够吗?我看不到ISourceT
界面有任何额外的好处。我遗漏了什么吗?@O.R.Mapper:类型是在使用接口时指定的。@Dennis:是的,我真的需要两者,但老实说,更简单的设计并不能改变游戏规则,我只是好奇而已。:)我敢肯定C++处理这个。我认为问题在于.Net泛型是编译/动态的,因此表达能力较低。是的,在发布之前,我尝试过这种语法和其他语法,但没有成功/你说得很好,尽管在我的设计中这没有任何意义+1.IElement
class IntegersSource : ISource<IElement<int>>
class IntegersSource : ISource<IElement<int>> { public int GetSomething() { return 1; } }