C#泛型介绍

什么是泛型

一种类型占位符,或称之为类型参数。我们知道在一个方法中,一个变量的值可以作为参数,但其实这个变量的类型本身也可以作为参数。泛型允许我们在调用的时候再指定这个类型参数是什么。在.net中,泛型能够给我们带来的两个明显好处是——类型安全和减少装箱、拆箱。

类型安全和装箱、拆箱

作为一种类型参数,泛型很容易给我们带来类型安全。而在以前,在.net1.1中我们要实现类型安全可以这样做 :

//假设你有一个人员集合
public class Person{
 private string _name;
 public string Name
 { get { return _name; }
 set { _name = value;}}
}
//假设你有一个人员集合
public class PersonCollection : IList
{
 ...
 private ArrayList _Persons = new ArrayList();
 public Person this[int index]
 { get { return (Person)_Persons[index]; } }
 public int Add(Person item)
 { _Persons.Add(item);
  return _Persons.Count - 1;}
 public void Remove(Person item)
 { _Persons.Remove(item); }
 object IList.this[int index]
 { get { return _Persons[index]; }
 set { _Persons[index] = (Person)value; }}
 int IList.Add(object item)
 { return Add((Person)item); }
 void IList.Remove(object item)
 { Remove((Person)item); }
  ...
}

上述代码主要采用了显性接口成员(explicit interface member implementation)技术,能够实现类型安全,但问题是:

·产生重复代码。假设你还有一个Dog类集合,其功能相同,但为了类型安全,你必须要Copy一份代码,这样便使程序重复代码增加,当面对变化的时候,更难维护。

public class DogCollection : IList
{
 ...
 private ArrayList _Dogs = new ArrayList();
 public Dog this[int index]
 { get { return (Dog)_Dogs[index]; } }
 public int Add(Dog item)
 { _Dogs.Add(item);
  return _Dogs.Count - 1;}
 public void Remove(Dog item)
 { _Dogs.Remove(item); }
 object IList.this[int index]
 { get { return _Dogs[index]; }
 set { _Dogs[index] = (Dog)value; }}
 int IList.Add(object item)
 { return Add((Dog)item); }
 void IList.Remove(object item)
 { Remove((Dog)item); }
  ...
}

如果在泛型中,要实现类型安全,你不需要拷贝任何代码,你仅仅需要这样做:

List<Person> persons = new List<Person>();
persons.Add(new Person());
Person person = persons[0];
List<Dog> dogs = new List<Dog>();
dogs.Add(new Dog());
Dog dog = dogs[0];

时间: 2024-10-31 10:15:38

C#泛型介绍的相关文章

Visual C#泛型学习之泛型介绍

visual 什么是泛型 一种类型占位符,或称之为类型参数.我们知道在一个方法中,一个变量的值可以作为参数,但其实这个变量的类型本身也可以作为参数.泛型允许我们在调用的时候再指定这个类型参数是什么.在.net中,泛型能够给我们带来的两个明显好处是--类型安全和减少装箱.拆箱. 类型安全和装箱.拆箱 作为一种类型参数,泛型很容易给我们带来类型安全.而在以前,在.net1.1中我们要实现类型安全可以这样做 : //假设你有一个人员集合 public class Person{ private str

泛型介绍(接上一篇,具体的事例随后呈上)

2.2接口约束为了规定某个数据类型必须实现某个接口,需要声明一个接口约束(interface constraint).有了这种约束之后,甚至不需要执行类型转换,就可以调用一个显示的接口成员实现.为了确保T类型参数都是先了IComparable接口,public class Binary<T> where T:System.IComparable{...}编译器会确保每次使用Binary类的时候,都必须指定一个实现了IComparable接口的类型参数.     2.3 struct/class

.Net Compact Framework泛型使用的注意点

在.Net Framework 2.0发布后,泛型就已经深入人心.在CF2.0中也加入了泛型,但大家可知道CF2.0 与非精简版中泛型的区别呢?下面将详细叙述,我在.Net CF中使用泛型的几个注意事项. 泛型介绍: 泛型类和泛型方法同时具备可重用性.类型安全和效率,这是非泛型类和非泛型方法无法具备的. 举例:原先使用集合类型存储数据,数据量大后,装箱拆箱不但影响效率,而且也非安全,毕竟存放 进集合的都是Object对象.泛型对象在声明后,即定义好存放的类型,避免装箱拆箱及数据转换. 泛型的使用

C#泛型基本概念问题

问题描述 这是我在msdn上看到的一段关于泛型介绍的话:泛型是2.0版C#语言和公共语言运行库(CLR)中的一个新功能.泛型将类型参数的概念引入.NETFramework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候.例如,通过使用泛型类型参数T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险其中我对这句不太明白:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方

初步理解Swift中的泛型_Swift

如果你已经动手写过Swift的程序,相信你已经了解了Swift语言的知识,比如如何写类(class)和结构体(struct).但Swift可没这么简单,呵呵呵.这篇教程主要讲述Swift的一个强力的特性:泛型.这个特性在很多程序设计语言里都非常受欢迎. 对于类型安全(type-safe)语言,一个常见的问题就是如何编写适用于多种类型输入的程序.想象一下,两个整型数相加和两个浮点数相加的程序看起来应该非常类似,甚至一模一样才对.唯一的区别就是变量的类型不同. 在强类型语言中,你需要去定义诸如add

看到他我一下子就悟了-- 泛型(2)

   先说些题外话,只所以写这些东西.是看了CSDN上的曹版主的一篇:手把手教编程,不知道有没有人愿意参与.说实话,我工作四年,总感觉晕晕乎乎的,好多技术都 懂,但是没有一项是精通的.看了这篇帖子,说实在话我可想去,去聆听大神的教导.主要是想提高自己,由于没有时间,又因为身在北京.所以就没有报名(呵呵,报名也 可能没有机会去).所以自己就去图书馆去搞他提出的这些概念.其实我更希望在北京的大神们也能组织类似的活动.我想响应一定也很多,其实我想如果能组织一次这样的 活动,大神们也会得到提高的.这些都

类型参数的约束(C# 编程指南)

类型参数的约束(C# 编程指南) Visual Studio 2005 其他版本 38(共 55)对本文的评价是有帮助 - 评价此主题 在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制.如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误.这些限制称为约束.约束是使用 where 上下文关键字指定的.下表列出了六种类型的约束: 约束 说明 T:结构 类型参数必须是值类型.可以指定除 Nullable 以外的任何值类型.有关更多信息,请参见使用可

向Visual Basic程序员介绍泛型(一)

visual|程序|程序员 此文档是Sean Campbell, Scott Swigart, Kris Horrocks, Derek Hatchard, and Peter Bernhardt.等人创作的<向Microsoft Visual Basic程序员介绍Whidbey>一书中的样章,版权归原作者和出版社所有.转载请注明此声明. 本文用通俗的用语和大量的实例向Visual Basic程序员介绍了下一版Visual Basic.Net中将要增加的新功能--泛型.此文章可以帮助广大VB用

C# 泛型深入理解介绍_C#教程

引言: 在上一个专题中介绍了C#2.0 中引入泛型的原因以及有了泛型后所带来的好处,然而上一专题相当于是介绍了泛型的一些基本知识的,对于泛型的性能为什么会比非泛型的性能高却没有给出理由,所以在这个专题就中将会介绍原因和一些关于泛型的其他知识. 一.泛型类型和类型参数 泛型类型和其他int,string一样都是一种类型,泛型类型有两种表现形式的:泛型类型(包括类.接口.委托和结构,但是没有泛型枚举的)和泛型方法.那什么样的类.接口.委托和方法才称作泛型类型的呢 ?我的理解是类.接口.委托.结构或方