使用通用类型定义的类型

时间:2011-07-04 13:00:37

标签: c# generics type-parameter

为标题道歉 - 我真的无法想出描述我的要求的非常好的方式。

我希望能够定义一个通用接口(或类,它并不重要),其中Type参数提供另一个可以从类访问的Type。希望这段代码片段能够解释。

interface IFoo
{
   TOtherType DependentType { get; }
}

interface IMyGeneric<TBar> where TBar : IFoo
{
   TBar ReturnSomeTBar();
   TBar.DependentType ReturnSomeTypeOnTBar();
}

因此,在此示例中,我希望一个类实现IFoo(例如Foo)并公开另一个类型DependentType(例如int),这样我就可以使用IMyGeneric<Foo>有方法:

public Foo ReturnSomeTBar()
{
}

public int ReturnSomeTypeOnTBar()
{
}

显然上面的代码没有编译,所以有没有办法实现泛型链接的这种行为?

2 个答案:

答案 0 :(得分:2)

首先,IFoo也需要通用

interface IFoo<TDependent>
{
   TDependent DependentType { get; }
}

然后IMyGeneric需要有2种类型的参数

interface IMyGeneric<TBar,TDependent> where TBar : IFoo<TDependent>
{
   TBar ReturnSomeTBar();
   TDependent ReturnSomeTypeOnTBar();
}

也许这会让你更接近你的解决方案;重新开始。

答案 1 :(得分:1)

TBar.DependentType必须是TBar的一部分,这不是你可以对泛型类型参数进行约束的那种。

如何使用2种类型的参数呢? IMyGenertic<TBar, TFoo>?可用的解决方法?