这两天一直在与泛型做斗争,现在总算是把这一章的内容都看完了。整理一下心得
泛型(generics),C++中称为模板。是.net 2.0中才加入的技术。
个人觉得“模板”这个称呼更准确些,泛型这个东西就是一种类的模板,把一个具体的类A套进去,便成为了对这个类A进行操作的一个新类B,实现了对A类的一些操作和功能。
常用的几个系统定义好的泛型:
1.可空类型 System.Nullable<>
如:System.Nullable<int> nullableInt;即定义了一个可空的int变量(个人感觉是把int封箱到了一个Nullable<int>的对象中。使用了隐式类型转换)
C#甚至修改了语法,提供了一种更高效的方法定义可空类型:
int? nullableInt;
这种int变量是可以使用if(null==nullableInt)的方法判断是否有值。另外还有HasValue属性可用。
但将int?变量赋给int时需要显式类型转换,例:
int? op1=5;
int result=(int)op1*2;
系统还提供一个新的语法用以处理结果为null的运算--“??”运算符
使用方法,例:
int? op1=null;
int result=op1*2 ?? 5;
当op1*2得到一个null时,将??之后的5赋值给result。另外这种方法还可以省去表达式前的显式类型转换符。
using System.Collections.Generic;之所以默认被加载到项目中,因为它是List<T>和Dictionary<K,V>的命名空间。非常之常用。
List<T>可以非常方便地定义一个自己的类A的列表。
使用方法,例:
List<MyClass> myClassCollection = new List<MyClass>();
之后就可以直接使用myClassCollection的Add()、Remove();方法,用foreach遍历myClassCollection了。
至于定义泛型类,用的时候现看吧。实在是很麻烦的说...
18:15 2007-1-23
以上转自:http://riqe.bokee.com/viewdiary.14851583.html
下面是一个简单的应用了:在vs2005下,using System.Collections.Generic;//引入泛型命名空间
public static List<Users> GetAllUsers()
{
List<Users> AllUsers = new List<Users>();
string procName = "dbo.getAllUsers";
SqlDataReader sdr = DataBase.RunProcReader(procName);
while (sdr.Read())
{
AllUsers.Add(new Users(sdr));
}
sdr.Close();
return AllUsers;
}
{
List<Users> AllUsers = new List<Users>();
string procName = "dbo.getAllUsers";
SqlDataReader sdr = DataBase.RunProcReader(procName);
while (sdr.Read())
{
AllUsers.Add(new Users(sdr));
}
sdr.Close();
return AllUsers;
}