c# 泛型(1)
2015-11-19 17:20
127 查看
泛型概述
泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。再说白点就是我的类里的一些类型是可以动态的,可以根据调用者的需要来。这样有一个什么好处呢,就是提高了我的代码的复用性。
您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。
现在给大家写一个小的例子
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace test { class Program { static void Main(string[] args) { int obj = 2; Test<int> test = new Test<int>(obj);//这个地方 实例化调用我的构造方法 同事Test<int>这个int传到我的Test类当中的T //说白了现在我的T就是int类型了 这样其他的地方需要类型的地方就可以直接使用这个T //也就是咱们上面说的您可以通过数据类型的替代参数编写类或方法的规范。 //当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。 Console.WriteLine("int:" + test.obj); //这个地方输入一下我的Test类当中一个变量的值 string obj2 = "hello world"; Test<string> test1 = new Test<string>(obj2); Console.WriteLine("String:" + test1.obj); Console.Read(); } } class Test<T> { public T obj; //这个 obj的值 就是我调用者需要的类型 //可以不写死 我的调用者在实例化类时传的什么类型这个地方T就是什么类型 public Test(T obj) { this.obj = obj; //给变量赋值 } } }
看一下输出结果:
同时我也可以有一个泛型的方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace test { class Program { static void Main(string[] args) { int obj = 2; Console.WriteLine("int:" + Test<int>(obj)); string obj2 = "hello world"; Console.WriteLine("int:" + Test<string>(obj2)); Console.Read(); } public static T Test<T>(T Obj) { return Obj; } } }
输出结果
泛型(Generic)的特性
使用泛型是一种增强程序功能的技术,具体表现在以下几个方面:它有助于您最大限度地重用代码、保护类型的安全以及提高性能。
您可以创建泛型集合类。.NET 框架类库在 System.Collections.Generic 命名空间中包含了一些新的泛型集合类。您可以使用这些泛型集合类来替代 System.Collections 中的集合类。
您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
您可以对泛型类进行约束以访问特定数据类型的方法。
关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。
刚写没多久哪里写的不好的多包涵。
相关文章推荐
- C#编程中设置程序只可被运行一次的方法
- 【C#】DataGridView显示数据表
- c# 对于批量表的统一查询 WM_CONCAT行列转换行数
- C#对象克隆介绍
- C# Async与Await用法
- 【C#】利用System.IO中的File类中的ReadAllText与WriteAllText输入输出小文件
- 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#控制台程序)
- 【C#】不可变字符串String的常用方法
- C#导出excel图表(使用ChartWizard)
- c#读xls
- C# 之 服务端获取远程资源
- C# Keywords
- 参数数组
- 在VS中如何让C#语言编写的程序自动以管理员身份运行
- C# 可变参数
- C#对象序列化与反序列化
- C# 设计模式----抽象工厂模式
- C# 设计模式----抽象工厂模式
- C#中ref和out的区别
- 【C#】简单窗体程序,判断是否闰年,禁止窗体调整大小,关闭窗体前的判断