@H_502_3@@H_502_3@ 核心:@H_502_3@@H_502_3@ ( 一)、什么是泛型@H_502_3@@H_502_3@ @H_502_3@ ·具有占位符的类、结构、接口和方法@H_502_3@@H_502_3@ @H_502_3@ ·泛型的参数只可以代表类,不能代表个别对象@H_502_3@@H_502_3@@H_502_3@ @H_502_3@自己理解:是实体的集合,通过我们调试过程中,我们可以知道,泛型返回的是实体的集合。如图:@H_502_3@@H_502_3@@H_502_3@
@H_502_3@@H_502_3@@H_502_3@
@H_502_3@@H_502_3@@H_502_3@ (二)、泛型的优点@H_502_3@@H_502_3@ @H_502_3@@H_502_3@·处理速度快@H_502_3@——泛型的类型属于强类型@H_502_3@@H_502_3@
@H_502_3@@H_502_3@ @H_502_3@@H_502_3@·代码复用方便@H_502_3@--在某些情况下,减少代码的书写量@H_502_3@@H_502_3@
@H_502_3@@H_502_3@ @H_502_3@@H_502_3@·安全性能高@H_502_3@——体现在泛型指定使用的类型,提供保护的类型,提高性能@H_502_3@@H_502_3@ (三)、泛型的应用(以机房重构基础数据设定为例)@H_502_3@@H_502_3@ @H_502_3@首先:建立泛型类@H_502_3@@H_502_3@ @H_502_3@我们要使用泛型,必须先建立一个转换的类,以我的机房为例,我将这个类建在了D层下;如图@H_502_3@@H_502_3@
@H_502_3@@H_502_3@ 其代码如下:@H_502_3@@H_502_3@ @H_502_3@@H_502_3@
<span >'**********************************************' 文 件 名:Convert' 命名空间:DAL' 内 容:' 功 能:' 文件关系:' 作 者:杜娟' 小 组:XX' 生成日期:2016/4/27 20:52:27' 版 本 号:V1.0.0.0' 修改日志:' 版权说明:'**********************************************imports System.Reflection '为了使用PorpertyInfoPublic Class Convert '将datatable转化为泛型集合 Public Shared Function convertToList(Of T As {New})(ByVal dt As Datatable) As IList(Of T) '注意:convertToList(Of T As {New}) 这里的new是用来约束T的,必须有,不然new T的时候会出现错误 Dim myList As New List(Of T) '定义最终返回的集合 Dim myTpye As Type = GetType(T) '得到实体类的类型名 Dim dr As DaTarow '定义行集 Dim tempname As String = String.Empty '定义一个临时变量 '遍历Datatable的所有数据行 For Each dr In dt.Rows Dim myT As New T '定义一个实体类的对象 Dim propertys() As PropertyInfo = myT.GetType().GetPropertIEs() '定义属性集合 Dim Pr As PropertyInfo '遍历该对象的所有属性 For Each Pr In propertys tempname = Pr.name '将属性名称赋值给临时变量 '检查Datatable是否包含此列(列名==对象的属性名) If (dt.Columns.Contains(tempname)) Then '将此属性与datatable里的列明比较,查看datatable是否包含此属性 '判断此属性是否有Setter If (Pr.CanWrite = False) Then '判断此属性是否可写,如果不可写,跳出本次循环 Continue For End If Dim value As Object = dr(tempname) '定义一个对象型的变量来保存列的值 If (value.ToString <> dbnull.Value.ToString) Then '如果非空,则赋给对象的属性 Pr.SetValue(myT,value,nothing) '在运行期间,通过反射,动态的访问一个对象的属性 End If End If Next myList.Add(myT) '添加到集合 Next Return myList '返回实体集合 End FunctionEnd Class</span>@H_502_3@第二:定义-转换-返回@H_502_3@@H_502_3@ @H_502_3@剩下的我们就是在自己要实现功能的这个D层@H_502_3@@H_502_3@ @H_502_3@1.定义一个泛型,2.添加泛型转换语句,3.最后返回泛型(注意代码中的最后三行代码)@H_502_3@@H_502_3@ @H_502_3@@H_502_3@
<span >imports System.Data.sqlClIEnt'**********************************************' 文 件 名:DBasicdata' 命名空间:DAL' 内 容:' 功 能:' 文件关系:' 作 者:杜娟' 小 组:XX' 生成日期:2016/5/18 8:06:32' 版 本 号:V1.0.0.0' 修改日志:' 版权说明:'**********************************************Public Class DBasicdata : Implements IDAL.IBasicdata Dim helper As New sqlhelper Public Function Show() As List(Of Entity.EBasicdata) Implements IDAL.IBasicdata.Show Dim sql As String Dim table As New Datatable '中间变量用于存储从数据库中 查找信息 '调用SQL语句查询 sql = "select * from T_Basicdata" '调用sqlHlper类中的ExecSelect()方法来执行查询,并获取返回值 table = helper.ExecSelectNo(sql,CommandType.Text) '定义泛型 Dim myList As New List(Of Entity.EBasicdata) 'table 转为泛型 myList = Convert.convertToList(Of Entity.EBasicdata)(table) '返回泛型 Return myList End Function</span>@H_502_3@第三,实体的建立@H_502_3@@H_502_3@ @H_502_3@在转泛型的过程中,一个非常重要的环节——实体层的定义@H_502_3@@H_502_3@ @H_502_3@·实体层的属性和方法的定义要和数据库中的数据类型和字段相同(这个是关键)@H_502_3@@H_502_3@ @H_502_3@@H_502_3@ 下面是我的实体层:
@H_502_3@@H_502_3@ @H_502_3@@H_502_3@
<span > '**********************************************' 文 件 名:EBasicdata' 命名空间:Entity' 内 容:' 功 能:' 文件关系:' 作 者:杜娟' 小 组:XX' 生成日期:2016/5/3 10:46:32' 版 本 号:V1.0.0.0' 修改日志:' 版权说明:'**********************************************Public Class EBasicdata Private _Rate As Integer Private _TmpRate As Integer Private _UnitTime As Integer Private _limitedTime As Integer Private _PrepareTime As Integer Private _limitedCash As Integer Private _head As String Public Property Int_Rate() As Integer Get Return _Rate End Get Set(value As Integer) _Rate = value End Set End Property Public Property Int_TmpRate() As Integer Get Return _TmpRate End Get Set(value As Integer) _TmpRate = value End Set End Property Public Property Int_UnitTime() As Integer Get Return _UnitTime End Get Set(value As Integer) _UnitTime = value End Set End Property Public Property Int_limitedTime() As Integer Get Return _limitedTime End Get Set(value As Integer) _limitedTime = value End Set End Property Public Property Int_PrepareTime() As Integer Get Return _PrepareTime End Get Set(value As Integer) _PrepareTime = value End Set End Property Public Property Int_limitedCash() As Integer Get Return _limitedCash End Get Set(value As Integer) _limitedCash = value End Set End Property Public Property Chr_head() As String Get Return _head End Get Set(value As String) _head = value End Set End PropertyEnd Class</span>(仅供大家参考)
@H_502_3@
@H_502_3@@H_502_3@ 总结:@H_502_3@@H_502_3@ 学习一个新的知识,一开始不可能会全懂,只有在我们经历过错误,自己解决了问题,才是真正认识了他,了解了他,才会让我们成长!@H_502_3@@H_502_3@ 总结
以上是内存溢出为你收集整理的【一步一步了解你——泛型的应用(机房重构)】全部内容,希望文章能够帮你解决【一步一步了解你——泛型的应用(机房重构)】所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)