【C#食谱】【面食】菜单1: 何时何地使用泛型
2008-01-27 22:54
393 查看
问题:
你想在一个新的项目中使用,或在现有的项目上把非泛型的类型转换成它们的泛型表示。但是,你却不知道自己为什么想这样做,并且你也不知道哪些非泛型类型应该被转换成它们的泛型表示。
解决方法:
决定何时何地使用泛型,你需要考虑以下几件事:
l
你的类型将包含或者以多种不确定的数据类型来运行吗?如果是这样,那么创建一个泛型将比创建一个非泛型提供很多好处。如果你的类型将只以一种确定的类型运行,那么你就没必要去创建一个泛型了。
l
如果你的类型是值类型,那么就会发生装箱和拆箱操作,你应该考虑使用泛型去避免这些操作。
l
跟泛型关联的强类型检查会导致很快就检查到错误(比如在编译时,而不是在运行时),因此,缩短你的纠错周期。
l
随着你要写好几个类去处理不同的数据类型的运行(比如一个ArrayList只保存StreamReaders,而另一个则只保存StreamWriters),你的代码是否受到“臃肿”的困扰?泛型很容易做到只写一次代码,就可以实现运行每种类型进行工作。
l
泛型会得到非常清晰的代码。去除代码的臃肿,对你的类型强制使用强类型检查,你的代码会更容易阅读和理解。
讨论:
在大部分情况,你的代码都是适合使用泛型的。泛型会产生更高的代码重用,更好的性能,强类型检查和易读的代码。
你想在一个新的项目中使用,或在现有的项目上把非泛型的类型转换成它们的泛型表示。但是,你却不知道自己为什么想这样做,并且你也不知道哪些非泛型类型应该被转换成它们的泛型表示。
解决方法:
决定何时何地使用泛型,你需要考虑以下几件事:
l
你的类型将包含或者以多种不确定的数据类型来运行吗?如果是这样,那么创建一个泛型将比创建一个非泛型提供很多好处。如果你的类型将只以一种确定的类型运行,那么你就没必要去创建一个泛型了。
l
如果你的类型是值类型,那么就会发生装箱和拆箱操作,你应该考虑使用泛型去避免这些操作。
l
跟泛型关联的强类型检查会导致很快就检查到错误(比如在编译时,而不是在运行时),因此,缩短你的纠错周期。
l
随着你要写好几个类去处理不同的数据类型的运行(比如一个ArrayList只保存StreamReaders,而另一个则只保存StreamWriters),你的代码是否受到“臃肿”的困扰?泛型很容易做到只写一次代码,就可以实现运行每种类型进行工作。
l
泛型会得到非常清晰的代码。去除代码的臃肿,对你的类型强制使用强类型检查,你的代码会更容易阅读和理解。
讨论:
在大部分情况,你的代码都是适合使用泛型的。泛型会产生更高的代码重用,更好的性能,强类型检查和易读的代码。
相关文章推荐
- 【C#食谱】【面食】菜单2:理解泛型
- 【C#食谱】【面食】菜单6:泛型约束
- 【C#食谱】【面食】菜单3:用泛型替代ArrayList
- 【C#食谱】【面食】菜单7:用默认值初始化泛型变量
- 【C#食谱】【面食】菜单5:用泛型副本替换哈希表
- 【C#食谱】【面食】菜单4:List和LinkedList性能比较
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- 编写高质量代码改善C#程序的157个建议[为泛型指定初始值、使用委托声明、使用Lambda替代方法和匿名方法]
- 何时何地不能使用泛型
- C#常用泛型使用方法举例
- [C#]泛型与非泛型集合类的区别及使用例程,包括ArrayList,Hashtable,List<T>,Dictionary<Tkey,Tvalue>,SortedList<Tkey,Tvalue>,Queue<T>,Stack<T>等
- C# 使用List泛型读取和保存文本文件
- C#三十二 泛型的理解和使用
- C#之使用NotifyIcon实现任务栏托盘菜单,图标闪烁效果及气泡提示 很多程序是只需要后台运行的,甚至不需要自己的应用界面。NotifyIcon提供了程序在任务栏的显示功能 程序下载链接如下
- 【C#食谱】【风味小吃】菜单6:获取一个数字的高字位值或低字位值
- 使用C# 2.0泛型实现单例模式重用
- 编写高质量代码改善C#程序的157个建议[为泛型指定初始值、使用委托声明、使用Lambda替代方法和匿名方法]
- 深入解析C#编程中泛型委托的使用
- 用C#实现双向链表(使用泛型)
- C#使用泛型的栈的示例