Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|产品中心下载什么是软件架构
您现在的位置: 天极网 > 开发频道 > VB中运用反射原理优化程序代码
全文
群乐:VB.NET

VB中运用反射原理优化程序代码

2007-05-17 07:00 作者: 张晓明 出处: 天极开发 责任编辑:方舟
  New一个clscolA/B(就叫colA/B吧)然后遍历文件或取一个包含所有记录(目标节点)的NodeList,然后作如下状:

With NodeList
 for i as integer=0 to .Count-1
  Dim objson as clsA/B=colA/B.GenerateAson
  objson.Name1=.item(i).childnodes(x1).innertext
  objson.Name2=.item(i).childnodes(x2).innertext
  ......
  ......
  ......
  colA/B.Addson(objson)
 next i
End With

  这段代码虽然他够用,又看似天衣无缝,但总觉得不对头,当属性达到一定数量,你有没有发现你将会使用了太多的同样的赋值句?小学语文就告诉过我们适当使用排比句可以为文章造势,但是如果你一口气排比了20条,那就是滥用了,笔者这里A文件每一条记录有三十多个Field,B文件也有十多个,如果这样用下来景象肯定巍巍壮观,先估计一下代码量,A文件每条记录按30个Field,B按15个算,赋值过程便是45行,还不包括格式化处理和排错处理,如果考虑程序扩展性,以后要读更多的文件则必然会伴随更多类似的过程出现,写程序和做人一样,要低调,一定要低调啊,有激情的程序员自然不会如此糟蹋自己的代码,是否能用一个函数或过程解决上述问题呢?新方案应用而生,采用反射(Imports/using System.Reflection),一个通用过程解决所有问题。示例函数如下:

Public Shared Function FillFromXml(ByVal NodeName As String, ByVal strPath As String, ByVal objFather As Object) As Boolean
 Try
  With xmlGetList(NodeName, strPath)
   For i As Integer = 0 To .Count - 1
    Dim st As Object = objFather.GenerateAson
    Dim ty As Type = st.GetType
    For Each pp As PropertyInfo In ty.GetProperties
     With DirectCast(.Item(i), XmlElement)
      If .SelectSingleNode(pp.Name.ToUpper) IsNot Nothing Then
       pp.SetValue(st, CType(.SelectSingleNode(pp.Name.ToUpper).InnerText.Trim, String), Nothing)
      End If
     End With
    Next
    objFather.AddSon(st)
   Next
  End With
  Return True
 Catch ex As Exception
  Return False
 End Try
End Function

  使用这个函数,只需要保证集合类clscolA/B有GenerateAson和Addson两个方法以及clsA/B两子类的属性名称与文件中Field保持一致即可。你只需要传递相应A或者B文件的目标节点名,文件路径,以及对应的集合类即可,此时再看一下赋值过程的代码减少了多少,恩,只有8行,这对于笔者则意味着省去了45-8=37行代码,而且丢弃老套的排比句。

  第一阶段战斗算是小试牛刀了一把,如果只算赋值过程代码减少百分数为37/45,接近83%。

共3页。 9 1 2 3 :
网友关注
最新上市
编辑推荐
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml