声明C#泛型类的格式如下:
其中,类型形参表是泛型类型或方法定义中的占位符列表。虽然泛型声明可以嵌套在非泛型类声明中,但是任何嵌套在泛型类声明或泛型结构声明中的类本身就是一个泛型类声明。
每个类型的形参都是一个简单的标识符,代表一个为创建构造类型而提供的类型实参的占位符。类型形参是将来提供的类型的形式占位符。例如,下面的代码就是一个泛型队列类的声明。
在上述代码中,设置了T是类型的形参,队列元素的类型为T,然后通过方法chuli()将T类型元素传入到队列,通过F从队列中取出T类型的元素。
在声明泛型类型时,它本身表示未绑定的泛型类型,可以生成多种不同类型的“模板”。类型实参被放在泛型类型声明名称后的尖括号对“<>”之间,在创建构造类型时能够替换类型形参的实际参数。当使用上面的泛型类mm<T>时,能够指定用于替换T的实际类型。例如在下面的代码中,指定了int为T的类型实参。
在上面的代码中,mm<int>就是泛型类mm<T>的构造类型。在mm<int>类型中,出现的每一个T都被替换为类型实参int。当创建mm<int>的实例后,items数组的实际类型是int[]而不是object[]。这样,就比非泛型处理提供了更高的效率。同样,mm<int>的方法chuli()和F所操作的也是int类型的值。如果将其他类型的值放入到队列,会产生编译错误。
泛型提供了强类型机制,即如果将一个int值放入到F1对象的队列,将会导致错误。(www.xing528.com)
在声明泛型类型时,可以包含任意数目的类型参数。虽然上面代码中的mm<T>只有一个类型形参,但是在下面代码中,泛型nn类具有两个类型的形参,一个用于键类型,一个用于值类型。
当使用上面的nn<A,B>类型时,必须提供两个类型实参。例如下面的代码:
如果是值类型,在每次泛型类型实例化和运行.NET公共语言时,都会创建单独的本机代码。如果是引用类型,则会共享该本机代码。
在类声明中,指定的基类型或基接口可以是构造类类型,但不能是类型形参,但是在基类或基接口的作用域中可以包含类型形参。看下面的一段代码:
在上述代码中,类nn不能使用基类v作为类型形参。
可以直接把泛型的所有接口成员作为构造类型的一部分,作为任何包容类中的类型形参。当公共运行语言在使用特定的封闭构造类型时,所出现的所有形参都将会被替换,被替换为该构造函数类型提供的实际类型实参。在实例函数中,this是包含这些成员声明的实例类型。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。