我们为什么用泛型编程-.NET

本文探讨了泛型编程的概念及其在.NET中的应用。介绍了为何选择泛型编程,如何利用泛型提高代码复用性和安全性,以及它如何改善性能。

1.先在前面说说为什么要用泛型来进行编程

      通常我们在编程的时候,经常会遇到2个模块的功能都是一样的,只是它接收的参数不同,一个可能是int类型,另个可能是个string类型,或者是你自定义的数据类型

     eg:public void GetDatas(int aa){}

          public void GetDatas(string aa){}

 就因为这样,我们在写处理的方法的时候就会写2个或者多个方法来进行处理。

      那现在我们就会这样想,有没有一个通用类型来代替int,string或你自定义的数据类型呢,那现在我们不就可以节约很多的代码量,把两个方法结合起来,泛型的出现那就是专门来解决这个问题的。这就是为什么要用泛型来进行编程的原因。我并没有说编程就一定要用泛型,也许有时候泛型编程起来会遇到些麻烦,只是还没碰到过那样的麻烦而已。好了,就写这里吧!

 

2.看例子演示

.NET2.0中新添加了不少特性,其中重要的就是对泛型的支持。

对泛型的支持包含在 System.Collections.Generic  命名空间中,看以下一个简单的例子:

ContractedBlock.gifExpandedBlockStart.gifCode
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");  无法进行类型转换。而我们经常需要的是在编译期间发现错误,而不是把错误带到运行期间,这样,安全性得不到保证。


下面的程序:

ContractedBlock.gifExpandedBlockStart.gifCode
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类型进行传递时,伴随这装箱和拆箱的操作,而这两个过程都会对性能造成很大的影响,但是使用泛型,没有了这个繁琐的过程,完成的是相同的功能,但是性能得到了提升。

转载于:https://www.cnblogs.com/MattMVP/archive/2009/05/10/1453694.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值