当前位置:编程学习 > C#/ASP.NET >>

深入浅出asp.NET泛型编程.NET泛型编程入门教程(1/9)

前言

  .net 2.0中泛型的出现是一个令人激动的特征。但是,什么是泛型?你需要它们吗?你会在自己的应用软件中使用它们?在本文中,我们将回答这些问题并细致地分析泛型的使用,能力及其局限性。

  类型安全

  .net中的许多语言如c#,c++和vb.net(选项strict为on)都是强类型语言。作为一个程序员,当你使用这些语言时,总会期望编译器进行类型安全的检查。例如,如果你把对一个book类型的引用转换成一个vehicle型的引用,编译器将告诉你这样的cast是无效的。

  然而,当谈到.net 1.0和1.1中的集合时,它们是无助于类型安全的。请考虑一个arraylist的例子,它拥有一个对象集合--这允许你把任何类型的对象放于该arraylist中。让我们看一下例1中的代码。

  例1.缺乏类型安全的arraylist

using system;
using system.collections;
namespace testapp
{
 class test
 {
  [stathread]
  static void main(string[] args)
  {
   arraylist list = new arraylist();
   list.add(3);
   list.add(4);
   //list.add(5.0);
   int total = 0;
   foreach(int val in list)
   {
    total = total + val;
   }
   console.writeline("total is {0}", total);
  }
 }
}

  本例中,我们建立了一个arraylist的实例,并把3和4添加给它。然后我循环遍历该arraylist,从中取出整型值然后把它们相加。这个程序将产生结果"total is 7"。现在,如果我注释掉下面这句:

list.add(5.0);

  程序将产生如下的运行时刻异常:

unhandled exception: system.invalidcastexception: specified cast is not valid.
attestapp.test.main(string[]args)in :workareatestappclass1.cs:line 17

  哪里出错了呢?记住arraylist拥有一个集合的对象。当你把3加到arraylist上时,你已把值3装箱了。当你循环该列表时,你是把元素拆箱成int型。然而,当你添加值5.0时,你在装箱一个double型值。在第17行,那个double值被拆箱成一个int型。这就是失败的原因。

  注意:上面的实例,如果是用vb.net书写的话,是不会失败的。原因在于,vb.net不使用装箱机制,它激活一个把该double转换成整型的方法。但是,如果arraylist中的值是不能转换成整型的,vb.net代码还会失败。

  作为一个习惯于使用语言提供的类型安全的程序员,你希望这样的问题在编译期间浮出水面,而不是在运行时刻。这正是泛型产生的原因。

  3. 什么是泛型?

  泛型允许你在编译时间实现类型安全。它们允许你创建一个数据结构而不限于一特定的数据类型。然而,当使用该数据结构时,编译器保证它使用的类型与类型安全是相一致的。泛型提供了类型安全,但是没有造成任何性能损失和代码臃肿。在这方面,它们很类似于c++中的模板,不过它们在实现上是很不同的。

1 2 3 4 5 6 7 8 9
补充:asp.net教程,基础入门
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,