interface <t>方法<t2>其中T2:T </t2> </t>

时间:2013-03-12 19:42:28

标签: c# .net generics

查看此代码段

public interface IExample<T>
{
    IExample<T> Exposes<TInclude>() 
        where T : TInclude;
}

我希望编译时间强制执行T可以转换为TInclude。可以进行运行时检查,但希望它是编译时间。

以上抱怨T未定义。

有什么建议吗?我正在尝试用C#generics做什么?

3 个答案:

答案 0 :(得分:5)

改述你的问题:

  

可以制作一个where子句来强制执行TIncludeT的约束或从T派生的任何类型。我希望强制执行“相反方向”约束:TIncludeTT的任何“基本类型”。这可能吗?

没有。 C#不支持这种约束。遗憾。

  

有什么建议吗?

Scala支持我认为的那种约束。和Java一样,尽管Java的做法有点奇怪。但我想你不想改变语言。

您能否更详细地描述您希望通过此界面表示的概念?如果我们知道你要做什么,那么给你提供实用的建议会更容易。

答案 1 :(得分:1)

您可以将类型约束移动到接口级别,如:

public interface IExample<T, U>
    where T : U
{
    IExample<T, U> Exposes();
}

答案 2 :(得分:0)

有一天可以实施:见1.2 Generalized Constraints