2023年VBnet學(xué)習筆記六VBnet的對象_第1頁
2023年VBnet學(xué)習筆記六VBnet的對象_第2頁
2023年VBnet學(xué)習筆記六VBnet的對象_第3頁
2023年VBnet學(xué)習筆記六VBnet的對象_第4頁
2023年VBnet學(xué)習筆記六VBnet的對象_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

VB.net學(xué)習筆記(六)VB.net的對象1、System.Object每個變量、控件、窗體都繼承了System.Object2、對象的聲明與實例化簡樸說聲明,只是說明類型,實例化說明在內(nèi)存中分派了空間。用New來創(chuàng)建對象,得到類的一個新實例下面有5種實例化形式,其中3較為標準且可讀化高。_vb]viewplaincopyprint?DimaAstheClass'1,用兩語句來創(chuàng)建實例,先聲明再實例化a二NewtheClass()DimbAsNewtheClass()'2,僅一個語句實例化DimcAstheClass=NewtheClass()*3,僅用一個語句實例化,更能表白類型與創(chuàng)建,在接口/繼承上更好用doSomeThing(NewtheC1ass())'4,參數(shù)中創(chuàng)建實例doSomeThing(NewtheClass().getValue()),5,參數(shù)中創(chuàng)建的同時調(diào)用其方法3、對象引用通常使用對象都是使用對象的引用。對象的引用(對象變量)本質(zhì)上就是對象的指針就同C++的指針同樣。當用New創(chuàng)建一個對象時,就會將對象的引用(指針)_vb]viewp1aincopyprint?PublicPropertymName()AsString效果與PubliemNameasString同樣這個功能叫“自動實現(xiàn)的屬性”。MSDN描述如下:“自動實現(xiàn)的屬性”使您可以快速指定類的屬性,而無需編寫代碼對該屬性執(zhí)行Get和Set操作。通過自動實現(xiàn)的屬性,可在一行中聲明一個包含默認值的屬性。[vb]viewplaincopyprint?PublicPropertyNameAsStringPublicPropertyOwnerAsString="DefauItName"PublicPropertyItemsAsNewList(OfString)From{"Mn,"T","W"}PublicPropertyIDAsNewGuid()在聲明自動實現(xiàn)的屬性時,VisualBasic會自動創(chuàng)建一個隱藏的私有字段(稱為“支持字段”)來包含該屬性的值。支持字段名稱是在自動實現(xiàn)的屬性的名稱前面加下劃線(_)。例如,假如聲明一個名為ID的自動實現(xiàn)的屬性,則支持字段的名稱為—ID。假如有一個類成員的名稱也是—ID,則會產(chǎn)生命名沖突并且VisualBasic會報告編譯器錯誤。此外,支持字段還具有下列特性:支持字段的訪問修飾符始終為Private,即使該屬性自身具有不同的訪問級別(如Public)也是如此。假如該屬性標記為Shared,則支持字段也是共享的。為該屬性指定的特性不應(yīng)用于支持字段。可從類中的代碼以及從監(jiān)視窗口等調(diào)試工具中訪問支持字段。但是,支持字段不會顯示在Inte1liSense文字完畢列表中。必須改用標準的“擴展”屬性語法(此時不能用自動實現(xiàn)的屬性功能)。假如要執(zhí)行下列任一操作,則必須使用擴展屬性定義語法:向?qū)傩缘腉et或Set過程添加代碼,如用于驗證Set過程中的傳入值的代碼。例如,在設(shè)立屬性值之前,您也許希望驗證一個表達電話號碼的字符串是否包含所需數(shù)目的數(shù)字。為Get和Set過程指定不同的可訪問性。例如,您也許希望將Set過程設(shè)為Private,將Get過程設(shè)為Pub1ico創(chuàng)建WriteOn1y或ReadOnly屬性。使用參數(shù)化屬性(涉及Default屬性)。若要為屬性指定參數(shù),或者為Set過程指定附加參數(shù),必須聲明擴展屬性。為支持字段設(shè)立特性,或者更改支持字段的訪問級別。為支持字段提供XML注釋。下例是限制賦值時,只能在項目內(nèi)生效,項目外不能賦值。_vb]viewplaincopyprint?Pub1icPropertymName()AsStringGetReturnmNameEndGetFriendSet(valueAsString)彳又限于項目內(nèi)使用mName=va1ueEndSetEndProperty7、參數(shù)化屬性屬性有也許是單一值,也可是多個值(屬性數(shù)組、參數(shù)化屬性)。這樣,它可認為某些設(shè)立一個可選范圍,或者成一個數(shù)組,如:電話號碼可存儲多值。為此,我們可以把mPhone電話號碼屬性設(shè)立成哈希表類型。例:參數(shù)是“索引”[vb]viewp1aincopyprint?PrivatemPhonesAsNewHashtable'哈希表類(集合)PublicPropertyPhone(ByVallocationAsString)AsString'參數(shù)類似索引在哈希表中定位GetReturnmPhones.Item(1ocation)EndGetSet(valueAsString)IfmPhones.ContainsKey(location)Then,判斷是否已有此索引mPhones.Item(location)=value'有,直接更新值E1semPhones.Add(location,value)'無,加入索引及值EndIfEndSetEndProperty注:哈希表,本質(zhì)上同數(shù)組相同,都是通過“索引”來取得或設(shè)立值。但數(shù)組是“數(shù)值”型的索引,而哈希表索引可以是其它類型比如字符串,數(shù)組是連接存儲,哈希表是通過“索引”(關(guān)鍵字)映射取得。此外,哈希表比數(shù)組靈活,但更浪費空間。8、只讀屬性、只寫屬性正如前面所說,在Property前加入ReadOnly(只讀)或亞山?0111丫(只寫),就可限制對屬性的操作。如:PublicWriteOnlyPropertyAmber()asint32set(ByValValueAsinteger)'只讀,當然只有Set而沒有GetmAmber=ValueEndSetEndPropetty9>默認屬性對象可以實現(xiàn)默認屬性,用它時,不用指明屬性,會自動賦值或獲取相應(yīng)的某屬性。這時,須用Default來指明某屬性是默認的屬性。例:[vb]viewplaincopyprint?PrivatemPhonesAsNewHashtab1eDefaultPublicPropertyPhone(ByVa11ocationAsString)AsString'用default表達這個屬性當作對象的默認值GetReturnmPhonesJtem(1ocation)EndGetSet(valueAsString)IfmPhones.ContainsKey(location)ThenmPhones.Item(location)=va1ueElsemPhones.Add(1ocation,value)EndIfEndSetEndProperty'===========================================DimmyPersonAsNewPeop1emyPerson.Phone("home")="12345678",沒有指定為默認屬性時,必須這樣明確指明屬性myPerson("home")="12345678",一旦指明默認屬性為phone時,可簡化成此句,自動知道是Phone屬性默認屬性必須是帶參數(shù)的屬性,不帶參數(shù)的屬性不能為默認值。猜想是不是不帶參數(shù)時,VB.net無法判斷是隱式的類型轉(zhuǎn)換還是給默認屬性進行賦值?對否?存儲到一個變量中。下面是對象a,和b賦值時本質(zhì)情況,在C++中被稱為淺復(fù)制4、取消對象給一個對象引用賦值為Nothing時,就取消了這個對象的引用。經(jīng)實驗,Nothing事實上存儲的是0,和C++同樣給一個對象變量設(shè)立為0時,就取消它指向堆中分派的空間。這時.Net會知道:這個對象不再需要,運營庫會在某時刻銷毀該對象,收回內(nèi)存及資源。因此在.Net刪除對象之前,F(xiàn)ramework會為該對象調(diào)用Finalize方法。5、前期綁定與后期綁定前期綁定:編譯時就知道類型,故能準確地分派空間指定大小,運營速度快后期綁定:編譯時不知道,只有運營時才知道,它提供了靈活性(但Inte1liSense也就失效了),由于是運營時動態(tài)分派所以速度慢。后期綁定容易犯錯,所以一般要配合Try....Cateh...進行解決異常情況(optionStrictoff就是可以后期綁定,默認)6、類型轉(zhuǎn)換隱式轉(zhuǎn)換與顯式轉(zhuǎn)換Cint,Clong....等是為了兼容由VB6轉(zhuǎn)向VB.net,這并不是最佳的方式。VB.net提供了幾個顯式轉(zhuǎn)換。(1)Convert轉(zhuǎn)換類可用Convert.ToLong(變量)之類,把變量轉(zhuǎn)換成Long型此類只能將已經(jīng)一些基本類型已經(jīng)明確知道類型納入到其中的函數(shù),并不能代表所有。注意:1、假如出現(xiàn)錯誤,將拋出異常。比如將負數(shù)轉(zhuǎn)為非負的UInt322、共享方法MaxValue,MinValue勿需參數(shù)就可得到值如:Long.MaxVa1ue(2)Parse、TryParse方法僅用于值類型,將字串轉(zhuǎn)為相應(yīng)的數(shù)值類型resu1t=Long.Parse(n100")假如失敗,將拋出異常,而異常會消耗額外的系統(tǒng)資源,影響性能。于是TryParse出場,它封裝了異常解決,只返回是否成功的邏輯值,成功,返回True,失敗為FaIse,常用于轉(zhuǎn)換前判斷。dimaasLongifLong.TryParse(H100H,Long)then

b=aendif(3)Ctypeb=aendif(3)Ctype函數(shù)默認OptionStrict是關(guān)閉的,因此是可以隱式轉(zhuǎn)換,但假如啟動了,一些轉(zhuǎn)換就不能進行,就可以用Ctype指定。dimaasobject=cdimbasstringb=a,若啟optionstrict將犯錯,這時須指定為Ctype(a,string)CType若失敗,將引發(fā)異常(4)DirectCast(a,b)函數(shù)把a轉(zhuǎn)為b類型,僅用于引用類型且用于假定可以直接轉(zhuǎn)換的,不能對轉(zhuǎn)換數(shù)據(jù)執(zhí)行額外的解決,即不具有積極性。常用于具有繼承關(guān)系的類型。失敗將產(chǎn)生異常。假如說CType是智能體,可以轉(zhuǎn)換任意類型,那么DirectCast只能轉(zhuǎn)換具用繼承判斷的引用型(5)TryCastTryCast與DirectCast類似,不同的時,因封裝了異常解決,它不會拋出異常。假如成功,返回對的轉(zhuǎn)換后的類型;假如失敗,返回NothingTryCast用于繼承等的引用類型,不會拋出異堂---_--———-幣o—————-———---================類對象是由類產(chǎn)生,對象是類的一個實例。1、創(chuàng)建類用Class關(guān)鍵字來創(chuàng)建類PuIbicClassPerson???????????????????EndClass最常見的是每個文獻只包含一個類。注意:我們可以發(fā)現(xiàn)一個簡樸的窗體程序就只有一個類,而沒有什么實例產(chǎn)生,或運營。這是什么因素呢?本來:一方面啟動窗體時候已經(jīng)實例化了一個對象,該對象會有一個線程,通常我們稱為UI始終監(jiān)視信息泵系統(tǒng),假如接受到類似的拖動,點擊,重繪信息,消息泵就會去告知UI,讓UI來解決2、字段字段即C++的數(shù)據(jù)成員,是用來存儲數(shù)據(jù)的。每產(chǎn)生一個對象都會產(chǎn)生一個字段的副本。注意關(guān)鍵字的作用域:Private私有,只能用于類中代碼Public公有,類內(nèi)類外的任何程序集的的任何項目都可使用Protected保護,只用于該類繼承的類Friend友元,只能用于項目或組件的代碼ProtectedFriend用于項目或組件的代碼以及項目內(nèi)或項目外從該類繼承的類[vb]viewplaincopyprint?PublicClassPeoplePrivatemNameAsString'字段,即數(shù)據(jù)成員PrivatemBirthdayAsDateEndClass3、方法方法是類的方法成員,由sub或function等來完畢對數(shù)據(jù)成員的操作,或?qū)ν獠康囊唤鉀Q。sub是不用返回值function需返回值,返回值在代碼中用return來指明,或者用方法名(函數(shù)名)賦值取得[vb]viewplaincopyprint?PublicFunctionAge()Asint32ReturnCInt(DateDiff(DateInterval.Year,mBirthday,Now()))'用return返回值EndFunctionPublicFunotionAge()AsInt32Age=CInt(DateDiff(DateInterva1.Year,mBirthday,Now())),用方法名取得返回值EndFunction4、方法的作用域方法前面的關(guān)鍵字用來指明方法的作用域它與字段的作用域同樣。比如:Friend的方法,表白對于項目內(nèi)的代碼這是對象接口的一部分,但使用該程序集的其它應(yīng)用程序或項目不能調(diào)用。5、方法的參數(shù)參數(shù)與前面的sub,Function同樣。對于值傳遞用byval,或用引用傳遞使用ByRef,這樣在方法中更改其值,可使原值發(fā)生變化。_vb]viewplaincopyprint?Pub1icC1assPeoplePrivatemNameAsString,字段,即數(shù)據(jù)成員PrivatemBirthdayAsDatePrivatemTotalDistanceAsInt32PublicSubWalk(ByVaidistanceAsInt32),若需改變外部distance值,這里可改byval為byrefmTota1Distance+=distanceEndSubPub1icFunctionAge()AsInt32ReturnCInt(DateDiff(Datelnterval.Year,mBirthday,Now()))'用return返回值EndFunctionEndClass6、屬性.net提供了一種特殊的方法,稱

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論