泛型简单介绍

        泛型能够最大限度的重用代码、保护类型的安全、提高性能。

        泛型最常见的用途是创建集合类

        泛型数据类型中使用的信息可在执行时通过反射获取。

        能够创建自己的泛型接口、泛型类、泛型方法、泛型事件、泛型托付。

     

    个人理解

        我所使用使用的泛型是一个list<>集合。仅仅是集合中的每个元素都是一个实体,而每个实体都相当于DataTable中的一条记录。DataTable是多条记录的集合,而list<>是多个实体的集合。



    什么要转泛型?

        1、list<T>遍历方便,取到的都是单个的实体。

        2、降低输入,仅仅须要传一个实例T就能够获取它的不论什么属性。

        3、正确的构建泛型类,能够降低代码中的安全问题。

        4、泛型确保了在工作量最小的情况下,为应用程序提供最佳的性能。

    泛型实例

         以充值为例,实战一下将DataTable转换为泛型,首先我们在D层创建一个类ConverHelper,用于将DataTable转换为泛型。

         

<span style="font-size:18px;"><strong>Imports System.Reflection  '引用反射
Imports System.Collections.Generic
Module ConverHelper
Public Class ConverHelper
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
End Module
</strong></span>



     D层中充值窗口调用这个类

 

<span style="font-size:18px;"><strong>        dt = sqlhelper.ExecSelect(str, CommandType.Text, sqlparamsnew)

        If (dt.Rows.Count > 0) Then
list = ConverHelper.ConverHelper.ConvertToList(dt, list)
Return list
Else
Throw New Exception("没有记录!")
End If</strong></span>



    此时,D层的返回值类型

<span style="font-size:18px;"><strong> List(Of Entity.RechargeEntity)</strong></span>



    事实上当我们接触一些新东西的时候,它可能并没有想象中的那么难,仅仅要去做就能够了。

最新文章

  1. HTTP协议详细总结
  2. mysql 将时间戳直接转换成日期时间
  3. 转:MPlayer源代码分析
  4. tcpdump参数应用
  5. [转] GIS二次开发(C#+AE)
  6. 字串数_hdu_1261(大数极致).java
  7. jvm监控命令介绍
  8. iOS基础 - XML &amp; JSON
  9. oracle_sequence用法
  10. 【转】C语言堆栈入门——堆和栈的区别
  11. HBase 是列式存储数据库吗
  12. vue组件自定义属性命名
  13. YUV420序列转成图片
  14. RAMOS_XP制作教程
  15. JMeter--使用URL回写来处理用户会话
  16. javascript学习笔记(二)
  17. 网络TCP建立连接为什么需要三次握手而结束要四次
  18. JavaScript深拷贝—我遇到的应用场景
  19. 【剑指offer】面试题 5. 替换空格
  20. mvn命令若干:

热门文章

  1. POJ 1328 Radar Installation 贪心题解
  2. POJ 1991 DP
  3. hbase xshell
  4. HTML 页面内容禁止选中
  5. PHP 获取完整URL地址
  6. 今日SGU 5.8
  7. [TypeScript] Model Alternatives with Discriminated Union Types in TypeScript
  8. 可变参数的实现my_sprintf
  9. mahout的特性(三)
  10. 命令行SVN的使用