时间:2021-05-19
泛型方法是使用类型参数声明的方法,如下所示:
static void Swap<T>(ref T lhs, ref T rhs){ T temp; temp = lhs; lhs = rhs; rhs = temp;}下面的代码示例演示一种使用 int 作为类型参数的方法调用方式:
public static void TestSwap(){ int a = 1; int b = 2; Swap<int>(ref a, ref b); System.Console.WriteLine(a + " " + b);}也可以省略类型参数,编译器将推断出该参数。下面对 Swap 的调用等效于前面的调用:
Swap(ref a, ref b);相同的类型推理规则也适用于静态方法和实例方法。编译器能够根据传入的方法实参推断类型形参;它无法仅从约束或返回值推断类型形参。因此,类型推理不适用于没有参数的方法。类型推理在编译时、编译器尝试解析重载方法签名之前进行。编译器向共享相同名称的所有泛型方法应用类型推理逻辑。在重载解析步骤中,编译器仅包括类型推理取得成功的那些泛型方法。
在泛型类中,非泛型方法可以访问类级别类型参数,如下所示:
如果定义采用相同类型参数作为包含类的泛型方法,编译器将生成警告 CS0693,因为在方法范围内为内部 T 提供的参数隐藏了为外部 T 提供的参数。如果需要使用其他类型参数(而不是实例化类时提供的类型参数)来灵活地调用泛型类方法,请考虑为方法的类型参数提供另一个标识符,如下面示例的 GenericList2<T> 中所示。
class GenericList<T>{ // CS0693 void SampleMethod<T>() { }}class GenericList2<T>{ //No warning void SampleMethod<U>() { }}使用约束对方法中的类型参数启用更专门的操作。此版本的 Swap<T> 现在名为 SwapIfGreater<T>,它只能与实现 IComparable<T> 的类型参数一起使用。
void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T>{ T temp; if (lhs.CompareTo(rhs) > 0) { temp = lhs; lhs = rhs; rhs = temp; }}泛型方法可以使用许多类型参数进行重载。例如,下列方法可以全部位于同一个类中:
void DoWork() { }void DoWork<T>() { }void DoWork<T, U>() { }声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
上篇文章给大家介绍了浅析C#中的类型系统(值类型和引用类型),接下来通过本文给大家介绍下c#泛型类型,说下C#中的泛型,熟练地使用泛型能提高代码的重用性,使用我
在C#开发中,必不可少的要用到泛型。泛型是.NET2.0版本就有的,它广泛应用于C#框架中容器的使用中。下面我们来详细介绍一下。 一、泛型的主要优势
一、泛型的基本概念java与c#一样,都存在泛型的概念,及类型的参数化。java中的泛型是在jdk5.0后出现的,但是java中的泛型与C#中的泛型是有本质区别
今天学习一下c#中的泛型委托。1.一般的委托,delegate,可以又传入参数(
C#泛型和数组在C#2.0中,下限为零的一维数组自动实现IList。这使您可以创建能够使用相同代码循环访问数组和其他集合类型的泛型方法。此技术主要对读取集合中的