当前位置: 首页 > 编程语言 > C#

C#-泛型方法与非泛型方法共享

时间:2023-04-11 03:24:36 C#

C#-泛型方法与非泛型方法我有点困惑为什么/何时我想使用泛型方法,因为非泛型方法有访问其包含类的泛型成员并传递泛型参数。因此,使用一个可能忽略这一点的jar标头示例(但强调了我为什么要问),我为什么要这样做:publicclassSomeGeneric{publicTSwap(refTa,refTb){Ttmp=a;一=b;b=tmp;}}在publicclassSomeGeneric{publicTSwap(refTa,refTb){Ttmp=a;一=b;b=tmp;}}这?或者,真的,我为什么要使用通用方法呢?您通常对非泛型类型使用泛型方法。例如,查看Enumerable类。它为大多数LINQ函数定义了通用的扩展方法,但它本身并不通用。您可能还需要泛型类型中的泛型方法,但前提是泛型方法使用不同的泛型类型说明符。这允许你写类似的东西:返回这个.CompareTo(otherConverted);(当然,这有点做作,但对于Foo来说,它编译并工作得很好vs.double等)如果包含的类不是通用的怎么办?如果它有一个不同的泛型类型参数怎么办?第一个例子没有多大意义,因为没有使用类参数。考虑另一个例子:publicclassSomeGeneric{publicKConvertTo(Ta){returnCodeThatConvertsTtoK(a);}}及其用法:newSomeGeneric().ConvertToInt("ten");如果类和方法都是泛型的,那么类型参数(“泛型参数”)当然必须有不同的名称。在你的第一个例子中,不能有两个不同的东西。如果您的方法是非静态的(如图所示),如果您选择使包含的类成为泛型,则必须在实例化该类时指定类型。像varobj=newSomeGeneric();.所以它应该是逻辑上“属于”由类建模的对象的东西。如果您的方法是静态的,并且您选择使类成为泛型,您仍然必须以某种方式指定类的类型参数。如果从类外部调用该方法,它将类似于SomeGeneric.Swap(refa,refb);.使方法泛化的优点是在许多情况下您可以使用类型推断,这允许您省略尖括号类型参数。您只能使用通用方法来做到这一点。示例:nonGeneric.Swap(refa,refb);其中Swap方法是通用的。编译器将查看a和b的编译时类型,并在不指定的情况下确定哪个T是合适的。结论:如果T在逻辑上不属于某个类(如List),则将其与方法一起使用。方法级类型参数的常见场景是扩展方法,因为它们必须在非泛型静态类中声明。但是非泛型类型中的每个泛型成员都需要它们。以上就是C#学习教程的全部内容:C#——泛型方法与非泛型方法。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——publicstaticclassExtensions{publicstaticvoidFoo(thisAa,Bb){[...]}publicstaticTBar(thisStringinput){[...]}publicstaticUFooBar(thisVv,Ww){[...]}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: