我对为什么/何时想要使用泛型方法感到有点困惑,因为非泛型方法可以访问其包含类的泛型成员并无论如何都可以传递泛型参数。
因此,使用一个可能没有抓住重点的固定示例(但强调了我问这个问题的原因),我为什么要这样做:
public class SomeGeneric<T>
{
public T Swap<T>(ref T a, ref T b)
{
T tmp = a;
a = b;
b = tmp;
}
}
over
public class SomeGeneric<T>
{
public T Swap(ref T a, ref T b)
{
T tmp = a;
a = b;
b = tmp;
}
}
this?
或者,实际上,为什么我要使用通用方法at all?
您通常会在非泛型类型中使用泛型方法。
例如,看看Enumerable class。它定义了大多数 LINQ 功能的通用扩展方法,但它本身不是通用的。
您可能还需要泛型类型中的泛型方法,但前提是该泛型方法使用了不同的泛型类型说明符。
这使您可以编写如下内容:
class Foo<T> where T : IConvertible, IComparable<T>
{
int CompareTo<U>(U other) where U : IConvertible
{
// Convert to this
T otherConverted = Convert.ChangeType(other, typeof(T));
return this.CompareTo(otherConverted);
}
}
(当然,这有点做作,但是可以正确编译并工作Foo<int>
与一个相比double
, etc)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)