0

我有一个要在外部扩展的通用类。

如果我属于 的类MyGenericClass<T>,我可以简单地定义一个方法,例如

public MyReturnType MyMethod() 
{ 
    MyReturnType m; 
    //some code
    return m;
}

然后可以像往常一样由实例调用myGenericClass.MyMethod();

但是,我想使用扩展在外部添加此功能。

以下不编译:

public static MyReturnType MyMethod(this MyGenericClass<T> mgc)
{
    MyReturnType m; 
    //some code
    return m;
}

因为无法推断类型 T。

以下确实编译:

public static MyReturnType MyMethod<T>(this MyGenericClass<T> mgc)
{
    MyReturnType m; 
    //some code
    return m;
}

但是,这需要我输入myGenericClass.MyMethod<MyT>();,更糟糕的是,MyMethod 中的“T”没有与 MyGenericClass 中的“T”相同的约束——这两个泛型是独立的(并且依赖于用户对两个类使用相同的类型和功能)。

我该如何正确声明?

谢谢 Haighstrom

4

1 回答 1

5

您的最后一个定义是正确的。您在方法声明和类型参数中都使用的事实T意味着在两种情况下类型都被限制为相同(这意味着您不能交叉类型)。

于 2013-07-16T14:52:34.773 回答