使用其他泛型参数的泛型类型

时间:2010-06-05 21:10:36

标签: c# .net generics

我对.net泛型有疑问。请考虑以下代码:

public abstract class Test<TKey>
{
    TKey Key { get; set; }
}

public class Wrapper<TValue, TKey>
    where TValue : Test<TKey>
{
    public TValue Value { get; set; }
}

现在,在使用此代码时,我可以执行以下操作:

Wrapper<Test<int>, int> wrapper = new Wrapper<Test<int>, int>();

必须提供两次int类型参数。是否可以修改Wrapper定义,要求TValue为泛型类型,并使用这个嵌套的TKey类型参数的泛型类型参数?

1 个答案:

答案 0 :(得分:1)

我想这取决于您是否真的需要将Value属性公开为TValue来自TValue的{​​{1}}。换句话说,您是否需要来公开仅对派生类可用的功能,或者您是否可以简单地公开具有基类所有功能的Test<T>

在后一种情况下,您可以将类定义简化为:

Test<T>

至于您正在寻找的精确功能:我不相信当前版本的C#中提供的任何内容。

那就是说,你的另一种选择可能是将你的public class Wrapper<TKey> { public Test<TKey> Value { get; set; } } 类本身用作基类:

Wrapper