经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
C#-泛型类型
来源:cnblogs  作者:Tynam.Yang  时间:2018/11/20 21:38:11  对本文有异议
概述
  泛型类和泛型方法兼具可重用性、类型安全性和效率,这是非泛型类和非泛型方法无法实现的
  泛型通常与集合以及作用于集合的方法一起使用
   泛型所属命名空间:System.Collections.Generic 
  可以创建自定义泛型接口、泛型类、泛型方法、泛型事件和泛型委托,以提供自己的通用解决方案,设计类型安全的高效模式
  泛型允许编写一个可以与任何数据类型一起工作的类或方法
 
示例
 
  1. 1 using System;
  2. 2 using System.Collections.Generic;
  3. 3
  4. 4 namespace GenericTest
  5. 5 {
  6. 6 public class TestGeneric<T>
  7. 7 {
  8. 8
  9. 9 private T[] array;
  10. 10 public TestGeneric(int i)
  11. 11 {
  12. 12 array = new T[i + 1];
  13. 13 }
  14. 14 public T GetItem(int index)
  15. 15 {
  16. 16 return array[index];
  17. 17 }
  18. 18 public void setItem(int index, T value)
  19. 19 {
  20. 20 array[index] = value;
  21. 21 }
  22. 22 }
  23. 23
  24. 24 class Tester
  25. 25 {
  26. 26 static void Main(string[] args)
  27. 27 {
  28. 28 TestGeneric<char> MyArray = new TestGeneric<char>(5);
  29. 29 for (int i = 0; i < 5; i++)
  30. 30 {
  31. 31 MyArray.setItem(i, (char)(i + 97));
  32. 32 }
  33. 33
  34. 34 for (int i=0; i<5; i++)
  35. 35 {
  36. 36 Console.WriteLine(MyArray.GetItem(i));
  37. 37 }
  38. 38 Console.WriteLine();
  39. 39 Console.ReadKey();
  40. 40 }
  41. 41
  42. 42 }
  43. 43 }

 

结果

 

约束

  对代码能够在实例化类时用于类型参数的类型种类施加限制
  约束的方式是指定T的祖先,即继承的接口或类
  代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误
  定义:public T GetInfo<T>(string id) where T : CBaseInfo
 

约束限定条件

  •  T:struct    类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型
  •  T:class      类型参数必须是引用类型,包括任何类、接口、委托或数组类型
  •  T:new()      类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时new() 约束必须最后指定
  •  T:<基类名> 类型参数必须是指定的基类或派生自指定的基类
  •  T:<接口名称> 类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。
  •  T:U    为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数,称为裸类型约束

例:

  1. public class Myarray<T> : B<T> where T : new() { }

定义多个类型参数和约束:

  1. public class Base<A,B,C> where A: struct
  2. where B: new()
  3. where C: class
  4. { }

泛型也可以继承泛型:

  1. class D:C<string,int>
  2.  
  3. class E<U,V>:C<U,V>
  4.  
  5. class F<U,V>:C<string,int>

 

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号