【背景】
泛型,在机房收费系统里面有着广泛的应用。
【定义】
泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法存储或者使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型或其方法的参数类型出现。泛型的方法还可以将参数类型用作返回值类型或者某个形参的类型。
【为什么使用泛型】
泛型的作用就是避免强制类型转换,提高类型安全,提高代码的重用性,减少装箱拆箱提高性能,减少错误。
【应用案例】
Imports System.Reflection
Module ConvertHelper
Public Class ConvertHelper
'将datatable转换为泛型集合
Public Shared Function ConvertToList(Of turn As {New})(ByVal dt As DataTable) As IList(Of turn)
'这里new是用来约束的;
Dim mylist As New List(Of turn) '定义最终返回的集合
Dim myType As Type = GetType(turn) '得到实体类的类型名
Dim dr As DataRow '定义行集
Dim tmpName As String = String.Empty '定义一个临时变量
'遍历datatable表的所有数据行
For Each dr In dt.Rows
Dim myturn As New turn
Dim propertys() As PropertyInfo = myturn.GetType().GetProperties() '定义属性集合
Dim pr As PropertyInfo
'遍历该对象的所有属性
For Each pr In propertys
tmpName = pr.Name '将属性名称赋值给临时变量
If (dt.Columns.Contains(tmpName)) Then '将此属性与datatable属性相比较,查看datatable是否包含了此属性;
'判断此属性是否含有setter
If (pr.CanWrite = False) Then
Continue For
End If
Dim value As Object = dr(tmpName) '定义一个对象型的变量来保存列的值
If (value.ToString <> DBNull.Value.ToString) Then '如果非空则赋给对象属性
pr.SetValue(myturn, value, Nothing) '在运行期间通过反射,动态的访问一个对象的属性
End If
End If
Next
mylist.Add(myturn) '添加到集合
Next
Return mylist
End Function
End Class
End Module
【总结】
泛型使用的地方很多,还需要多多琢磨。