我有一个我想要在外部扩展的Generic类。
如果我在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
答案 0 :(得分:5)
你的最后一个定义是正确的。在方法声明和类型参数中使用T
这一事实意味着在两种情况下约束的类型都相同(意味着您不能跨越类型)。