.NET2.0中新添加了不少特性,其中重要的就是对泛型的支持。
那么为什么要用到泛型,有什么优势?
.NET中对泛型的支持包含在System.Collections.Generic命名空间中,看以下一个简单的例子:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace Console_Generic
{
class Program
{
static void Main(string[] args)
{
ArrayList al = new ArrayList();
al.Add(5);
al.Add(2);
al.Add("hh");
foreach (int i in al)
{
Console.WriteLine(i);
}
}
}
}
此程序在运行过程当中会出现运行时错误:al.Add("hh");无法进行类型转换。而我们经常需要的是在编译期间发现错误,而不是把错误带到运行期间,这样,安全性得不到保证。
下面的程序:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace Console_Generic
{
class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>();
list.Add(5);
list.Add(1);
list.Add(5.0);
foreach (int i in list)
{
Console.WriteLine(i);
}
}
}
}
此程序在编译期间不能通过,原因与上面的一致。但是在程序运行之前就可以发现错误。这正是我们所希望的。
在.NET中,所有的类型都单继承子OBJECT,我们经常要对返回的OBJECT类型进行强制转换,转换成为我们所希望的类型,例如:
return (PetShop.IDAL.IProduct)Assembly.Load(path).CreateInstance(className);
该句在运行时动态加载程序集,同时创建了一个实例化的对象,但是最终强制转化返回一个接口对象。
一般在强制转换的过程当中是不安全的,因为OBJECT对象可以随便转换为你想要的任何类型,所以使用泛型有效避免了转换过程中的不安全性。
其次,在将简单的类型封装位OBJECT类型进行传递时,伴随这装箱和拆箱的操作,而这两个过程都会对性能造成很大的影响,但是使用泛型,没有了这个繁琐的过程,完成的是相同的功能,但是性能得到了提升。
相关文章
- java泛型编程学习 笔记一:为什么要使用泛型
- .NET中如何使用反序列化JSON字符串/序列化泛型对象toJsonStr
- asp.net mvc3中泛型的使用
- 使用.NET中的Action及Func泛型委托深入剖析
- .NET Web应用中为什么要使用async/await异步编程
- 详解C#中的泛型以及编程中使用泛型的优点
- 为什么协议的关联类型在Swift中不使用泛型类型语法?
- 深入解析C#编程中泛型委托的使用
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
- .NET中为什么要使用泛型编程?