泛型是在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象---百度百科。其实通过对泛型实际的使用来看,泛型实际也就是自己规定的一个转化机制,转化的对象是一个数据集合,如一个Datatable或一个视图View,而转化的目标是一个实体类或其他类型的数据集合,泛型就是这中间的一个转化机制。
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
foreach (int item in list)
{
Console.WriteLine(item);
}
这是一个很简单的泛型,List<int> list = new List<int>();这里的作用是实例化出一个list类型为int的类型,下面的就是list类型的参数,它包括1、2、3这些参数,最下面的一个循环输出这3个参数,通过这个结构就可以大致理解泛型的使用特点。
泛型的好处:
1.泛型允许我们创建类,结构,接口和方法模板,这些模板用于在运行时定义具体的类型,是面向对象设计中的一个重要机制。
2.泛型提供了类型安全,提供一组类型的集合体,取代强制转换。
3.泛型的值类型避免了装箱和拆箱的损耗,提高系统的运行效率。
4.泛型通过转换数据表,将所需的Datatable转化为相应的实体类,以实现系统各个层之间的数据传递,这样就避免了对数据库结构的泄漏,增强了安全性。
在机房重构中使用泛型就是一个扩大了的简单结构,如下:
'/**********************************
'类名称:EntityHelper
'命名空间:JIFANG.ENTITY
'创建时间:2015/6/6 16:55:47
'作者:王泽
'小组:
'修改时间:
'修改人:
'版本号:v1.0.0
'***********************************/
Imports System.Collections.Generic
Imports System.Reflection
Public Class GenericList
'定义一个全局的方法,返回一个IList接口
Public Shared Function ConvertToList(Of T As New)(dt As DataTable, ts As IList(Of T))
'获得T的类型
Dim type As Type = GetType(T)
'定义一个临时变量
Dim strTemp As String = String.Empty
'遍历表中所有行数
For Each dr As DataRow In dt.Rows
'定义类型变量act获取动态创建对象T的类型。
Dim act As T = If((Nothing Is Nothing), Activator.CreateInstance(Of T)(), Nothing)
Dim propertys As PropertyInfo() = act.[GetType]().GetProperties()
'定义array变量,接收propertys中含有的属性,并提供对属性propertys元数据访问
Dim array As PropertyInfo() = propertys
Dim intCount As Integer = 0
'遍历所有对象属性
While intCount < array.Length 'length表示所有维数中元素的总和
'pr表示元素中含有的属性,并提供对数据访问
Dim pr As PropertyInfo = array(intCount)
strTemp = pr.Name
'列名=对象的属性名
If dt.Columns.Contains(strTemp) Then
'判断此属性是否设置函数
If pr.CanWrite Then '该属性是否可写
Dim value As Object = dr(strTemp)
'如果非空,则赋值给对象的属性
If value IsNot DBNull.Value Then
'设置对象的属性值。
pr.SetValue(act, value, Nothing)
End If
End If
End If
intCount += 1
Continue While
End While
'添加对象到泛型集合中
ts.Add(act)
Next
'返回泛型集合
Return ts
End Function
End Class
通过泛型可以很方便的传递数据,避免了对数据库安全的威胁性,同时也可以看出泛型也是面向对象设计的一个具体应用,封装了一个转换的方法来提供数据的转换,这也是一种思想上的升华。