描述VB.NET反射功能
VB.NET還是比較常用的,于是我研究了一下VB.NET反射功能,在這里拿出來和大家分享一下,希望對大家有用。我將利用VB.NET反射功能,構(gòu)建一個自動完成初始化文件的保存/讀寫功能的類。在這個類中,只要程序作者在類內(nèi)部按程序選項的名稱定義好類的內(nèi)部成員變量(由于這個步驟仍然需要程序員進(jìn)行類內(nèi)的手工編碼,所以稱這個類為半自動初始化類),這個類就自動將程序選項從初始化文件中保存/讀取的工作,程序員不必再進(jìn)行繁瑣的讀寫文件部分的編碼。而且,這個類的構(gòu)建還可以有一個好處:由于應(yīng)用程序的選項都以成員變量的形式保存在類的內(nèi)部,程序員可以利用 VS提供的自動列出變量成員的功能查詢初始化文件的選項。例如這樣寫 string myAPPname= tobjAPPOption.General.APPName。據(jù)我所知,記住大量的程序選項的確切字符也不是什么好玩的事哦8-)
VB.NET反射功能
初始化文件內(nèi)容的需求。我們首先分析觀察一個標(biāo)準(zhǔn)的windows初始化文件win.ini內(nèi)容:
- [windows]
- load=
- run=
- NullPort=None
- device=HP LaserJet 6L PCL,PCL5EMS3,\\E***18B631240425\HPLaserJ
- [Desktop]
- Wallpaper=(無)
- TileWallpaper=1
- WallpaperStyle=0
該初始化文件的內(nèi)容用方括號括住的部分我們稱為初始化文件的節(jié),每一節(jié)下都組織了一系列與節(jié)有相應(yīng)功能的程序選項。如desktop節(jié)下就含有桌面墻紙(Wallpaper)/桌面墻紙鋪設(shè)(WallpaperStyle)的設(shè)置。在初始化文件中程序的選項大都可以用字符串/數(shù)字這些簡單的數(shù)據(jù)類型進(jìn)行保存。
根據(jù)這一需求,考慮到目前在VB.NET中使用xml文件非常方便,而且使用xml格式除可實現(xiàn)常規(guī)windows初始化文件的功能外,還可以多出樹形結(jié)構(gòu)組織的優(yōu)勢,所以本文設(shè)計的初始化文件確定采用xml文件格式。并作以下格式的XML文件的元素定義:
- 'Net對象以XML元素保存使用的格式定義
- 'Net對象的定義
- '<Class ObjectName=對象名稱 ObjectType(數(shù)據(jù)類型)=數(shù)據(jù)類型 > 數(shù)據(jù)內(nèi)容 </數(shù)據(jù)類型>
- '數(shù)組的定義 目前本類中實現(xiàn)的數(shù)組只支持string的一維數(shù)組
- '<Array ObjectName=對象名稱 ObjectType=數(shù)據(jù)類型 Length=數(shù)組大小> 元素定義</Array>
- '如果數(shù)組數(shù)組為nothing則格式如下
- '<Array ObjectName=對象名稱 ObjectType=數(shù)據(jù)類型 Length=0>nothing</Array>
- '簡單對象的定義'int32、String等
- '<SimpleObject ObjectName=對象名稱 ObjectType(數(shù)據(jù)類型)=數(shù)據(jù)類型 > 數(shù)據(jù)內(nèi)容 </數(shù)據(jù)類型>
- '當(dāng)SimpleObject代表數(shù)組內(nèi)的元素時,objectname代表數(shù)組的維數(shù)
- 'ObjectName 、ObjectType、 Lenght 屬性的使用舉例如下
- '例如Redim mai32Test(7) As String
- 'ObjectName取值為mai32Test,ObjectType取值為string[],Length 值為8
在VB.NET反射功能中,可以枚舉特定類型對象所包含的成員變量的類型及儲存值,這個功能經(jīng)常被一些普通程序員忽略,認(rèn)為用途并不大。但在本文中,這一功能將成為構(gòu)建半自動化初始化對象的核心,我們正需要這種功能將寫在初始化類中的變量類型和值自動向初始化文件保存或讀取。
【編輯推薦】