C# 泛型
阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买
在C#2.0中引入泛型。 泛型允许您使用占位符来定义其字段,方法,参数等类型的类。通用在编译时用一些特定类型替换这些占位符。 通用类可以使用尖括号<>定义。 例如,以下是具有通用成员变量,通用方法和属性的简单泛型类。 相关实例: class MyGenericClass<T> { private T genericMemberVariable; public MyGenericClass(T value) { genericMemberVariable = value; } public T genericMethod(T genericParameter) { Console.WriteLine("Parameter type: {0}, value: {1}", typeof(T).ToString(),genericParameter); Console.WriteLine("Return type: {0}, value: {1}", typeof(T).ToString(), genericMemberVariable); return genericMemberVariable; } public T genericProperty { get; set; } } 正如你在上面的代码中可以看到的,MyGenericClass用<T>定义。 <>表示MyGenericClass是通用的,底层类型将在稍后定义,现在将其视为T. 你可以取任何字符或词,而不是T. 现在,编译器在实例化类时,根据调用者传递的类型分配类型。 例如,以下代码使用int数据类型: MyGenericClass<int> intGenericClass = new MyGenericClass<int>(10); int val = intGenericClass.genericMethod(200); 运行结果: Parameter type: int, value: 200 Return type: int, value: 10 下图说明了编译器将如何用MyGenericClass中的int替换T. 上面的MyGenericClass <int>类将被编译,如下所示。 相关实例: class MyGenericClass { private int genericMemberVariable; public MyGenericClass(int value) { genericMemberVariable = value; } public int genericMethod(int genericParameter) { Console.WriteLine("Parameter type: {0}, value: {1}", typeof(int).ToString(), genericParameter); Console.WriteLine("Return type: {0}, value: {1}", typeof(int).ToString(), genericMemberVariable); return genericMemberVariable; } public int genericProperty { get; set; } } 您可以在实例化通用类时使用任何类型。 例如,以下示例使用字符串类型。 相关实例: MyGenericClass<string> strGenericClass = new MyGenericClass<string>("Hello Generic World"); strGenericClass.genericProperty = "This is a generic property example."; string result = strGenericClass.genericMethod("Generic Parameter"); 运行结果: Parameter type: string, value: Generic Parameter Return type: string, value: Hello Generic World 泛型基类当从泛型基类派生时,必须提供一个类型参数,而不是基类的泛型类型参数,如下所示。 相关实例: class MyDerivedClass : MyGenericClass<string> { //implementation } 如果你想让派生类是通用的,那么不需要为通用基类指定类型。 相关实例: class MyDerivedClass<U> : MyGenericClass<U> { //implementation } 如果通用基类具有约束,则派生类必须使用相同的约束。 相关实例: class MyGenericClass<T> where T: class { // Implementation } class MyDerivedClass<U> : MyGenericClass<U> where U: class { //implementation } 泛型委托正如你在上一节已经学到的,委托定义了它可以调用的方法的签名。 通用委托可以与委托相同的方式定义,但是具有通用类型。 例如,考虑以下通用委托,它需要两个通用参数。 相关实例: class Program { public delegate T add<T>(T param1, T param2); static void Main(string[] args) { add<int> sum = AddNumber; Console.WriteLine(sum(10, 20)); add<string> conct = Concate; Console.WriteLine(conct("Hello","World!!")); } public static int AddNumber(int val1, int val2) { return val1 + val2; } public static string Concate(string str1, string str2) { return str1 + str2; } } 运行结果: 30 Hello World!! 在上面的例子中,add delegate是通用的。 在Main()方法中,它定义了int类型变量sum的add delegate。 因此它可以指向具有int类型参数的AddNumber()方法。 add delegate的另一个变量使用字符串类型,因此它可以指向Concate方法。 这样,您可以对不同类型的参数的不同方法使用通用委托。 泛型可以应用于以下:
泛型的优点
更多泛型的资料阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买
版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境 本文地址:http://www.yuanjiaocheng.net/CSharp/Csharp-Generics.html |