欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
用VB.NET為智能設備編寫(xiě)半自動(dòng)初始化類(lèi)

用VB.NET為智能設備編寫(xiě)半自動(dòng)初始化類(lèi)

一、引言
  對于ncf(net精簡(jiǎn)版的英文縮寫(xiě))開(kāi)發(fā)人員,應用程序選項保存一般只有兩種途徑選擇:
  1、將選項的值寫(xiě)入注冊表,但如果所有應用程序都將值大量寫(xiě)入注冊表的做法最終將導致注冊表過(guò)大占用系統資源,而影響系統的運行效率;而且這就是很多軟件在硬啟設備之后不得不重新安裝的原因。根據現代程序編寫(xiě)中"程序盡可能與系統獨立"的思想,這種做法不推薦使用。
   2、將選項值以一個(gè)初始化文件的方式保存,這樣做可以最大限度避免系統資源占用,提高程序運行獨立性,這種做法個(gè)人認為是較為可取的方案。并且這種做法在.net完整版中實(shí)現非常簡(jiǎn)單,可以直接用Xml序列化類(lèi)來(lái)實(shí)現。但在專(zhuān)為智能移動(dòng)設備定做的net精簡(jiǎn)版中,由于不提供XML序列化屬性,使得保存和使用程序選項變得郁悶起來(lái)。程序開(kāi)發(fā)人員不得不對每一個(gè)程序選項作寫(xiě)入/讀取文件的編碼,這個(gè)枯燥無(wú)味的步驟絕對不會(huì )是一件有趣的事情。
  二、功能概述
   本文中,我將利用.net的反射功能,構建一個(gè)自動(dòng)完成初始化文件的保存/讀寫(xiě)功能的類(lèi)。在這個(gè)類(lèi)中,只要程序作者在類(lèi)內部按程序選項的名稱(chēng)定義好類(lèi)的 內部成員變量(由于這個(gè)步驟仍然需要程序員進(jìn)行類(lèi)內的手工編碼,所以稱(chēng)這個(gè)類(lèi)為半自動(dòng)初始化類(lèi)),這個(gè)類(lèi)就自動(dòng)將程序選項從初始化文件中保存/讀取的工 作,程序員不必再進(jìn)行繁瑣的讀寫(xiě)文件部分的編碼。而且,這個(gè)類(lèi)的構建還可以有一個(gè)好處:由于應用程序的選項都以成員變量的形式保存在類(lèi)的內部,程序員可以利用VS提供的自動(dòng)列出變量成員的功能查詢(xún)初始化文件的選項。例如這樣寫(xiě) string myAPPname= tobjAPPOption.General.APPName。據我所知,記住大量的程序選項的確切字符也不是什么好玩的事哦8-)
  三、程序實(shí)現先決條件分析
  1、初始化文件內容的需求
  我們首先分析觀(guān)察一個(gè)標準的windows初始化文件win.ini內容:

[windows]
load=
run=
NullPort=None
device=HP LaserJet 6L PCL,PCL5EMS3,\\E5A18B631240425\HPLaserJ
[Desktop]
Wallpaper=(無(wú))
TileWallpaper=1
WallpaperStyle=0
   該初始化文件的內容用方括號括住的部分我們稱(chēng)為初始化文件的節,每一節下都組織了一系列與節有相應功能的程序選項。如desktop節下就含有桌面墻紙 (Wallpaper)/桌面墻紙鋪設(WallpaperStyle)的設置。在初始化文件中程序的選項大都可以用字符串/數字這些簡(jiǎn)單的數據類(lèi)型進(jìn)行 保存。
  根據這一需求,考慮到目前在.net中使用xml文件非常方便,而且使用xml格式除可實(shí)現常規windows初始化文件的功能外,還可以多出樹(shù)形結構組織的優(yōu)勢,所以本文設計的初始化文件確定采用xml文件格式。并作以下格式的XML文件的元素定義:

'Net對象以XML元素保存使用的格式定義
'Net對象的定義
'對象名稱(chēng) ObjectType(數據類(lèi)型)=數據類(lèi)型 > 數據內容 數據類(lèi)型>
'數組的定義 目前本類(lèi)中實(shí)現的數組只支持string的一維數組
'對象名稱(chēng) ObjectType=數據類(lèi)型 Length=數組大小> 元素定義
'如果數組數組為nothing則格式如下
'對象名稱(chēng) ObjectType=數據類(lèi)型 Length=0>nothing
'簡(jiǎn)單對象的定義'int32、String等
'對象名稱(chēng) ObjectType(數據類(lèi)型)=數據類(lèi)型 > 數據內容 數據類(lèi)型>
'當SimpleObject代表數組內的元素時(shí),objectname代表數組的維數
'ObjectName 、ObjectType、 Lenght 屬性的使用舉例如下
'例如Redim mai32Test(7) As String
'ObjectName取值為mai32Test,ObjectType取值為string[],Length 值為8
  2、在.net中有一種稱(chēng)之為反射的功能,可以枚舉特定類(lèi)型對象所包含的成員變量的類(lèi)型及儲存值,這個(gè)功能經(jīng)常被一些普通程序員忽略,認為用途并不大。但在本文中,這一功能將成為構建半自動(dòng)化初始化對象的核心,我們正需要這種功能將寫(xiě)在初始化類(lèi)中的變量類(lèi)型和值自動(dòng)向初始化文件保存或讀 取。需要使用的反向類(lèi)型方法及說(shuō)明如下表:
四、程序實(shí)現核心代碼注釋
  1、我將這個(gè)半自動(dòng)初始化文件類(lèi)命名為clsAPPOption,類(lèi)內結構及包含過(guò)程的功能說(shuō)明如下:
  兩個(gè)區域#Region "應用程序使用的選項結構定義"、#Region "應用程序選項的變量聲明"中的內容是按初始化選項級組織的類(lèi)及類(lèi)的實(shí)例,每一個(gè)類(lèi)表示程序選項的一個(gè)初始化節,必須由最終使用者根據實(shí)際選項需要自行手工補充。
  fnGetAppDirectory:取得應用程序的運行目錄
  sbInitialDefaultAPPOption:設置程序選項的默認初始值(這個(gè)過(guò)程中的代碼需根據實(shí)際需要手工修改)。
  fnSaveAppOption:將類(lèi)內的程序選項保存到一個(gè)指定的文件中. (這個(gè)過(guò)程中的部分代碼需根據實(shí)際需要手工修改)
  fnLoadAppOption:在指定的文件中讀取應用程序的選項信息并保存到當前類(lèi)中(這個(gè)過(guò)程中的部分代碼需根據實(shí)際需要手工修改)。
  fnXMLElementToSimpleObject:將一個(gè)XMLElement轉為它代表的簡(jiǎn)單對象,所謂簡(jiǎn)單對象就是諸如int32\int16之類(lèi)的基本net對象。
  fnXMLElementToClassObject:將一個(gè)XMLElement轉換為它代表的類(lèi)對象。
  fnXMLElementToArray:將一個(gè)XMLElement轉為它代表的數組。
  fnArrayToXML:將一個(gè)數組放入XML文件中,目前只支持一維數組:例如dim aString(10) as string
  fnClassObjectToXML:將一個(gè)類(lèi)對象轉換為XML元素的表示形式。
  fnSimpleObjectToXML:將一個(gè)簡(jiǎn)單對象改為XML元素表示
  注:其中fnXMLElementToXXXX和fnXXXXToXML功能相對應,互為反函數。
  2、程序的實(shí)現是非常簡(jiǎn)單的,fnClassObjectToXML對指定的類(lèi)進(jìn)行反射操作,使用類(lèi)的類(lèi)型的GetFields方法枚舉類(lèi)內的成員變量信息,然后根據成員變量的類(lèi)型調用fnSimpleObjectToXML或fnArrayToXML,在函數結束的時(shí)候,將要轉換的類(lèi)以一個(gè)XMLElement對象的形式返回。

tobjClassObjectType = ni_objClassObject.GetType '取得類(lèi)的類(lèi)型,以利于反射調用
  ….其它代碼
  REM 以結構內的所有值進(jìn)行反射取值, 并存入XML對象中

For Each tobjFieldInfo In tobjClassObjectType.GetFields
If tobjFieldInfo.FieldType.IsArray = False Then '只是一個(gè)簡(jiǎn)單類(lèi)型,直接取得值
tobjXMLElement = fnSimpleObjectToXML(tobjFieldInfo.GetValue(ni_objClassObject), _
ni_objXMLDocument, _
tobjFieldInfo.Name)
tobjXMLClassObjectElement.AppendChild(tobjXMLElement)
Else
REM 如果是一個(gè)數組類(lèi)型,則進(jìn)行數組方法的調用以取得值,
'目前只支持一維數組元素
tobjXMLElement = fnArrayToXML(tobjFieldInfo.GetValue(ni_objClassObject), ni_objXMLDocument, tobjFieldInfo.Name, tobjFieldInfo.FieldType.FullName)
'將數組對象放入結構的XML對象中
tobjXMLClassObjectElement.AppendChild(tobjXMLElement)
End If
   fnSimpleObjectToXML的實(shí)現也很簡(jiǎn)單,根據前文確立的簡(jiǎn)單對象的定義,fnSimpleObjectToXML過(guò)程所要生成的xml 對象的幾個(gè)要素可以這樣獲?。篛bjectName在f nClassObjectToXML作反射后已經(jīng)獲取,并以參數傳遞的方式在調用fnSimpleObjectToXML時(shí)提供了。 ObjectType數據類(lèi)型則可以利用ni_objSimpleObject.GetType.FullName方法取得, ni_objSimpleObject就是在函數調用時(shí)傳入的簡(jiǎn)單對象的值。
  在編寫(xiě)fnArrayToXML過(guò)程時(shí)出現了一點(diǎn)小問(wèn)題,由于調用方不可能要求數組的元素逐個(gè)傳入,所以對數組的元素個(gè)數以及元素的值無(wú)法在函數中以對象反射的方式直接獲取。幸運的是,在Net反射操作中,可以利用Invoke方法來(lái)調用原始對象內的函數屬性過(guò)程,而數組的共享方法GetLength、GetValue功能適好是取數組元素個(gè)數及指定下標的元素值,所以問(wèn)題立刻迎刃而解。

'利用反射調用數組的getLenght方法取得數組的大小,這里僅支持一維數組,但對于初始化文件已足夠用了
tobjXMLAttribute = ni_objXMLDocument.CreateAttribute("ArrayLength")
tobjMethodInfo = tobjArrayType.GetMethod("GetLength")
ReDim taobjParameter(0)
taobjParameter(0) = 0
ti32Tempa = tobjMethodInfo.Invoke(ni_objArray, taobjParameter)
tobjXMLAttribute.Value = ti32Tempa
tobjXMLElement.SetAttributeNode(tobjXMLAttribute)
tobjXMLAttribute = Nothing
'加入數組的內的元素
For ti32LoopA = 0 To ti32Tempa - 1
'利用反射取得數組的GetValue方法取得實(shí)際元素的值
ReDim taobjParameterType(0)
taobjParameterType(0) = GetType(Integer)
tobjMethodInfo = tobjArrayType.GetMethod("GetValue", taobjParameterType)
ReDim taobjParameter(0)
taobjParameter(0) = ti32LoopA
tobjTempa = tobjMethodInfo.Invoke(ni_objArray, taobjParameter)
' 將數組元素放入對XML對象中
tobjXMLElementA = fnSimpleObjectToXML(tobjTempa, ni_objXMLDocument, ti32LoopA)
tobjXMLElement.AppendChild(tobjXMLElementA)
Next ti32LoopA
  從XML轉為net對象的過(guò)程基本都沒(méi)有什么技術(shù)難度。我只是根據xml中包含的ObjectType信息簡(jiǎn)單獲得簡(jiǎn)單對象的類(lèi)型,然后直接調用net強制轉換類(lèi)的功能將XML文件中指定的對象儲存的數值重新恢復為原來(lái)的net對象。代碼如下:

'根據XMLelement結構元素中指定的對象類(lèi)型,建立對象
tobjType = Type.GetType(tobjXMLSimpleObjectElement.GetAttribute("ObjectType"))
tobjReturnSimpleObject = Convert.ChangeType(tobjXMLSimpleObjectElement.InnerText, tobjType, Nothing)
  對于XML轉為數組用數組、轉為類(lèi)對象的方法可以參閱本文所附源代碼。
  3、初始化文件類(lèi)實(shí)例的調用:
  類(lèi)定義完成以后,可以在程序的全局范圍定義初始化類(lèi)的實(shí)例。在模塊內定義就可以了:

Public gobjAppOption As New clsAPPOption
  可以在程序啟動(dòng)的時(shí)候讀初始化文件信息到類(lèi)中,我是放在主窗體的load事件中的。

'讀取程序的選項
gobjAppOption.fnLoadAppOption()
  可以在程序的任意地方保存當前半自動(dòng)初始化類(lèi)的值到XML文件中,我在主窗體的closed事件中加入保存代碼:

gobjAppOption.fnSaveAppOption() '保存應用程序的選項
  程序的任意地方你都可以調用半自動(dòng)初始化文件類(lèi)的實(shí)例來(lái)讀取/保存程序選項的當前值:

'可以很好地利用VS提供的自動(dòng)列出成員的功能列出程序選項
'讀取選項的示例代碼
MessageBox.Show(gobjAppOption.mobjAPPGeneralOption.astrShowFileFilter(0))
'保存選項的示例代碼
'gobjAppOption.mobjAPPGeneralOption.astrHideFileFilter(0) = "*.zip"
  雖然這個(gè)半自動(dòng)化初始化文件類(lèi)還是需要手工添加少量代碼(在源代碼明確注釋要手工添加的部分),但還是那句老話(huà),如果一切事情電腦都會(huì )做的時(shí)候,離程序員下崗的日子就不遠了。

[ 本帖最后由 caoguoyang 于 2007-8-21 16:06 編輯 ]
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C#項目中一些文件類(lèi)型說(shuō)明
月光軟件站 - 編程文檔 - VC語(yǔ)言 - 每個(gè)開(kāi)發(fā)人員現在應該下載的十種必備工具
.NET Framework 工具
手動(dòng)使用Csc命令編譯C#文件
? 預編譯ASP.NET 把*.aspx.cs文件封裝成dll文件 |BOBO-BOSCO...
vb.net初相識
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久