频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

用VB.NET为智能设备编写半自动初始化类(1)

作者: MissileCat 出处:天极开发  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2007-01-27 14:19
关 键 词:.NET  VB  智能  设备  初始化  
阅读提示:本文中,我将利用.net的反射功能,构建一个自动完成初始化文件的保存/读写功能的类。在这个类中,只要程序作者在类内部按程序选项的名称定义好类的内部成员变量(由于这个步骤仍然需要程序员进行类内的手工编码,所以称这个类为半自动初始化类),这个类就自动将程序选项从初始化文件中保存/读取的工作,程序员不必再进行繁琐的读写文件部分的编码。

一、引言

对于ncf(net精简版的英文缩写)开发人员,应用程序选项保存一般只有两种途径选择:

1、将选项的值写入注册表,但如果所有应用程序都将值大量写入注册表的做法最终将导致注册表过大占用系统资源,而影响系统的运行效率;而且这就是很多软件在硬启设备之后不得不重新安装的原因。根据现代程序编写中"程序尽可能与系统独立"的思想,这种做法不推荐使用。

2、将选项值以一个初始化文件的方式保存,这样做可以最大限度避免系统资源占用,提高程序运行独立性,这种做法个人认为是较为可取的方案。并且这种做法在.net完整版中实现非常简单,可以直接用Xml序列化类来实现。但在专为智能移动设备定做的net精简版中,由于不提供XML序列化属性,使得保存和使用程序选项变得郁闷起来。程序开发人员不得不对每一个程序选项作写入/读取文件的编码,这个枯燥无味的步骤绝对不会是一件有趣的事情。

二、功能概述

本文中,我将利用.net的反射功能,构建一个自动完成初始化文件的保存/读写功能的类。在这个类中,只要程序作者在类内部按程序选项的名称定义好类的内部成员变量(由于这个步骤仍然需要程序员进行类内的手工编码,所以称这个类为半自动初始化类),这个类就自动将程序选项从初始化文件中保存/读取的工作,程序员不必再进行繁琐的读写文件部分的编码。而且,这个类的构建还可以有一个好处:由于应用程序的选项都以成员变量的形式保存在类的内部,程序员可以利用VS提供的自动列出变量成员的功能查询初始化文件的选项。例如这样写 string myAPPname= tobjAPPOption.General.APPName。据我所知,记住大量的程序选项的确切字符也不是什么好玩的事哦8-)

三、程序实现先决条件分析

1、初始化文件内容的需求

我们首先分析观察一个标准的windows初始化文件win.ini内容:

[windows]
load=
run=
NullPort=None
device=HP LaserJet 6L PCL,PCL5EMS3,\\E5A18B631240425\HPLaserJ
[Desktop]
Wallpaper=(无)
TileWallpaper=1
WallpaperStyle=0

该初始化文件的内容用方括号括住的部分我们称为初始化文件的节,每一节下都组织了一系列与节有相应功能的程序选项。如desktop节下就含有桌面墙纸(Wallpaper)/桌面墙纸铺设(WallpaperStyle)的设置。在初始化文件中程序的选项大都可以用字符串/数字这些简单的数据类型进行保存。
根据这一需求,考虑到目前在.net中使用xml文件非常方便,而且使用xml格式除可实现常规windows初始化文件的功能外,还可以多出树形结构组织的优势,所以本文设计的初始化文件确定采用xml文件格式。并作以下格式的XML文件的元素定义:

'Net对象以XML元素保存使用的格式定义
'Net对象的定义
'<Class ObjectName=对象名称 ObjectType(数据类型)=数据类型 > 数据内容 </数据类型>
'数组的定义 目前本类中实现的数组只支持string的一维数组
'<Array ObjectName=对象名称 ObjectType=数据类型 Length=数组大小> 元素定义</Array>
'如果数组数组为nothing则格式如下
'<Array ObjectName=对象名称 ObjectType=数据类型 Length=0>nothing</Array>
'简单对象的定义'int32、String等
'<SimpleObject ObjectName=对象名称 ObjectType(数据类型)=数据类型 > 数据内容 </数据类型>
'当SimpleObject代表数组内的元素时,objectname代表数组的维数
'ObjectName 、ObjectType、 Lenght 属性的使用举例如下
'例如Redim mai32Test(7) As String
'ObjectName取值为mai32Test,ObjectType取值为string[],Length 值为8

2、在.net中有一种称之为反射的功能,可以枚举特定类型对象所包含的成员变量的类型及储存值,这个功能经常被一些普通程序员忽略,认为用途并不大。但在本文中,这一功能将成为构建半自动化初始化对象的核心,我们正需要这种功能将写在初始化类中的变量类型和值自动向初始化文件保存或读取。

四、程序实现核心代码注释

1、我将这个半自动初始化文件类命名为clsAPPOption,类内结构及包含过程的功能说明如下:

两个区域#Region "应用程序使用的选项结构定义"、#Region "应用程序选项的变量声明"中的内容是按初始化选项级组织的类及类的实例,每一个类表示程序选项的一个初始化节,必须由最终使用者根据实际选项需要自行手工补充。

fnGetAppDirectory:取得应用程序的运行目录
sbInitialDefaultAPPOption:设置程序选项的默认初始值(这个过程中的代码需根据实际需要手工修改)
fnSaveAppOption:将类内的程序选项保存到一个指定的文件中. (这个过程中的部分代码需根据实际需要手工修改)
fnLoadAppOption:在指定的文件中读取应用程序的选项信息并保存到当前类中(这个过程中的部分代码需根据实际需要手工修改)
fnXMLElementToSimpleObject:将一个XMLElement转为它代表的简单对象,所谓简单对象就是诸如int32\int16之类的基本net对象
fnXMLElementToClassObject:将一个XMLElement转换为它代表的类对象
fnXMLElementToArray:将一个XMLElement转为它代表的数组
fnArrayToXML:将一个数组放入XML文件中,目前只支持一维数组:例如dim aString(10) as string
fnClassObjectToXML:将一个类对象转换为xml元素的表示形式
fnSimpleObjectToXML:将一个简单对象改为XML元素表示

注:其中fnXMLElementToXXXX和fnXXXXToXML功能相对应,互为反函数。


共2页: 1 [2] 下一页
【内容导航】
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看52473次)
·UML类图详解 (查看46951次)
·Java编程开发手册 (查看25172次)
·UML统一建模语言 (查看24155次)
·C#技术开发指南 (查看22515次)
·Java编程开发手册 (1195个砖)
·Java基础教程 (429个砖)
·C#技术开发指南 (304个砖)
·PB开发教程 (220个砖)
·.NET开发手册 (217个砖)
·Java编程开发手册 (653个好)
·Java基础教程 (569个好)
·.NET开发手册 (251个好)
·PB开发教程 (209个好)
·Delphi开发技术手册 (174个好)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有