




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、VB.NET之旅(一失蹤的窗體好久沒有新作,架不住兄弟們的問詢與詰問,只得拿些舊作來補上近來沒空寫作的缺乏。羞愧ing!這一系列與Henry手記系列不一樣,是一個人物辦法的情形故事,開端發(fā)表于計算機國際,適用于VB.net 初專家,老鳥們就不必在我這一系列的文章上浪費時間了。我期望自個有時間今后,能不斷持續(xù)這一系列的文章,參加許多的工程處理方案。一起,我的Henry手記也會持續(xù)寫下去,以報答長時間以來撐持我的一切兄弟。布景:我叫Henry,剛從大學計算機專業(yè)結業(yè),新參加索易公司的.NET開發(fā)小組;擔任帶我的嘍羅是大李,.NET高手,是個詼諧又有耐性的家伙;老白是咱們有些的頭頭,常常帶給咱們乖僻
2、又難纏的需求。榜首天上班,白司理就帶著我去.NET技能小組簽到?!按罄?這是新來的同事,你要多幫幫他?!崩习字钢覍σ粋€眼鏡后邊透著閃閃目光的年輕人說?!皼]疑問,他會做得極好的?!贝罄钅菚聪嗖怀?仍是人家謙讓呀?不論了,我只需自個盡力就對了。20分鐘后,我現(xiàn)已在分配給我的一臺P4電腦,WindowsXP平臺下翻開了Visual Studio.NET的集成編譯環(huán)境(IDE開端賞識了。一個多美麗的編譯環(huán)境呀,能夠自選運用時的個性是VB6的還是VC6的。我挑選的是RAD功用好的VB6個性?!澳銊傞_端觸摸.NET,在系統(tǒng)訓練之前先加深點形象,看看VB.NET與VB6有啥不一樣吧。你創(chuàng)立兩個窗體,每
3、個窗體上各有一個按鈕,點擊時躲藏其地址的那個窗體,切換出另一個窗體來?!贝罄畹穆曧懺诙呿懫?打斷了我對IDE的賞識。但他提的需求也太簡略了吧,在VB6中只需求兩句寫在按鈕的單擊呼應中的句子就行了:兩個窗體:Form1與Form2。Form1上的按鈕為: Command1,Form2上的按鈕為: Command2 Private Sub Command1_Click(Me.HideForm2.ShowEnd SubPrivate Sub Command2_Click(Me.HideForm1.Show在描繪窗口雙擊Button1后,編譯器會切換到代碼窗口的Button1的單擊呼應代碼中。在代碼
4、段中故計重施,當我想寫Form2.Show時,在Form2之后打個點,呈現(xiàn)的智能感知菜單中,卻沒有Show這一辦法。真新鮮,這怎樣能夠?莫非VB.NET改動有這么大。我昂首看了看站在我身旁的大李。大李馬上面露淺笑,看來是正中他的騙局。他手指向屏幕,點了點Form1中的代碼的最初處:PublicClass Form1手:Private SubButton1_Click(ByVal sender As System.Object,_ByVal e As System.EventArgsHandles Button1.ClickMe.Hide(Dim frm2As New Form2(實例化Form
5、2類,得到一個目標frm2.Show(End Sub在Form2的Button2的單擊工作中也相似地寫了一段代碼,運轉一下,和VB6的效果差不多了。正在得意中,大李走過來,在我的Form1中增加了一個文本框textbox1,清空其間的文字。然后運轉了一下程序。在運轉中,他在文本框里寫了幾個字:“Henry的著作”,然后點擊Button1切換到Form2,接著點擊Button2,從頭呈現(xiàn)的Form1的文本框中卻變成了空白。“這”我一時語塞,慢慢地想起點啥,“大概是程序經(jīng)過New布局辦法,每次點擊按鈕都會從頭實例化一次Form類吧?所以每次從頭呈現(xiàn)的窗體都不是從前從前呈現(xiàn)過的那個。那從前的窗體也就
6、失蹤了,調不出來了?!薄笆й?”大李不由笑了起來,“對呀,失蹤在內(nèi)存中。你每實例化一次,系統(tǒng)就會拓荒一塊內(nèi)存給一個目標,并會有相應的線程對其進行操控與辦理。若是作為進程中主線程的榜首個Form1被Hide起來,沒有封閉它,那么即便你封閉后來新創(chuàng)立的一切窗體,進程也不會被間斷。那么,用啥辦法去找回你失蹤的窗體,或許說怎么就只運用一個目標,不再每次實例化呢?”“大局目標!”我脫口而出,感受到大李模棱兩可,只好硬著頭皮持續(xù)說:“運用大局變量,使Form1與Form2只實例化一次,這樣就能夠了?!比缓?在大李的注視下,我開端施行我的方案:再創(chuàng)立一個模塊文件:module1.vb,并且同時在:處理方案辦
7、理器-項目名.sln -右點鼠標-特點-通用屬性->慣例->發(fā)動目標-改為Module1。讓程序發(fā)動后先運轉Module1中的代碼指令,然后編寫代碼如下:'Module1.vbModule Module1Public frm1As New Form1(界說Form1的共用變量實例Public frm2As New Form2(界說Form1的共用變量實例Sub Main(Application.Run(frm1這句話標明程序發(fā)動了modele后,會接下來運轉frm1,即form1的一個實例。主線程就變成運轉期的frm1了。End SubEnd Module這樣一來,frm1
8、、frm2就變成大局變量了,在Button1與Button2的單擊呼應代碼中只需寫:frm1.show就能夠了。再運轉程序,可以了,“Henry的著作”一向都會保持在Form1中的文本框里。大李老哥沒等我歡笑起來就再次出手,在frm1躲藏起來的時分,封閉了Form2窗口(frm2實例,桌面上啥窗體都沒有了,進程又一次被墮入在無法間斷的狀況下。My God,面向目標的VB.NET,愛你莫非真的這么難VB.NET之旅(二布局與析構在Form1窗體的實例被躲藏的時分,封閉了Form2窗體的實例,使我失去了對主線程的人工操控,進程無法正常封閉了。只好運用Ctrl+Alt+Del調出系統(tǒng)進程辦理器,強行
9、間斷了該進程。為了防止昂首看見大李的笑臉,我只好垂頭想辦法。有了,我只需能截獲Form2實例封閉的音訊,不就能夠再調出躲藏的主線程窗體了嗎?在Form2的基類事件(Base Class Event中重載Closing辦法進行處置:Private Sub Form2_Closing(ByVal sender As Object,ByVal e As_frm1.Show(End Sub哈,很便利,我封閉了Form2窗體的實例后,被躲藏的那個frm1又呈現(xiàn)了?!班?”大李總算發(fā)話了,“你再點擊一下Form1窗體上的Button1試試?!蔽冶承囊粵?隱約感受大李等待著的即是這個時分。無法的我還只能照他
10、說的去做。公然,彈出一個出錯窗口.“你封閉了frm2這個Form2的實例,也就完畢了這個目標的生存期,”大李看來是蓄勢已久了,“這即是犯錯提示中所說的無法拜訪名為Form2的已處置目標。當咱們封閉一個窗口的時分,會宣布一個終止呼應,并將該窗口目標,就象上面界說的frm2,送入停止行列,公共言語運行庫的廢物收回器盯梢著這個目標的生存期,此刻就會調用此目標基類,比方Form2的Dispose辦法,用于毀掉目標并收回資源。所以”“所以我只需判別一下frm2是不是被毀掉就行了,若是毀掉了,我就再布局一個實例不就行了?”我恍然大悟道。大李首次淺笑地址了答應說:“用frm2.IsDisposed就能夠來判
11、別了?!蔽倚恼詹恍貙懙?Private SubButton1_Click(ByVal sender As System.Object,_ByVal e As System.EventArgsHandles Button1.ClickIf frm2Is Nothing Or frm2.IsDisposed Then判別目標是不是被毀掉frm2=New Form2(End IfMe.Hide(frm2.Show(End Sub這下完善多了,兩個窗體之間的切換也不會有這么多別扭的疑問了。我轉過身,看到大李現(xiàn)已找了把椅子坐在我的身邊?!澳銇碚f說,對VB.NET的窗體實例的創(chuàng)立與毀掉的進程吧?!蔽艺?/p>
12、了一下雜亂的思路,長吁了一口氣,開端說:“一個窗體類,比方Form1類是經(jīng)過調用其基類,就是Form類的New辦法來創(chuàng)立實例、Dispose辦法來毀掉實例?!薄皼]錯。”大李邊說話,一邊在我的程序中點擊開來被代碼窗口主動折疊起來的" Windows 窗體描繪器生成的代碼":Public Sub New(MyBase.New('該調用是Windows窗體描繪器所必需的。InitializeComponent('在InitializeComponent(調用之后增加任何初始化End Sub'窗體重寫處置以整理組件列表。Protected Overloads
13、 Overrides Sub Dispose(ByVal disposingAs BooleanIf disposing ThenIf Not(components Is NothingThencomponents.Dispose(End IfEnd IfMyBase.Dispose(disposing辦法值得一說?!痹础.斔鼌?shù)中的disposing 為true 則開釋保管資源和非保管資源;為false 則僅開釋非保管資源。Form類的disposing為true。在封閉窗體時主動調用dispose的功用是得益于.net的公共語言運轉庫,運行庫主動處置目標規(guī)劃和辦理對目標的引證,當不再運用目
14、標時釋放它們。其生存期以這種辦法來辦理的目標稱為保管數(shù)據(jù)。主動內(nèi)存辦理消除了內(nèi)存走漏以及其他一些常見的編程過錯。任何類型的Dispose 辦法都大概開釋它具有的一切資源。它還大概經(jīng)過調用其父類型的Dispose 辦法開釋其基類型具有的一切資源。該父類型的Dispose 辦法大概開釋它具有的一切資源并一樣也調用其父類型的Dispose 辦法,從而在整個基類型層次布局中傳達該辦法。要保證始終正確地整理資源,Dispose 辦法大概能夠被屢次安全調用而不引發(fā)任何反常。”“可是,若是系統(tǒng)疑問或應用程序調用上出了疑問,不能正常調用Dispose怎樣辦?”我想起了啥,問道?!叭羰墙?jīng)過Dispose還開釋不
15、潔凈或沒有調用Dispose,系統(tǒng)的廢物收回器會調用目標的Finalize 辦法進行鏟除。由于履行Finalize 辦法會大大減損功用,所以咱們不會一開端就用它去進行鏟除作業(yè)。”大李略微說明了一下。我總算想起了一個重要的疑問:“若是總是在模塊中界說的大局變量來處置,由于拜訪規(guī)模太大,會不會有安全性的疑問?”“當然,咱們能夠試試其他的處理方案?!笨偸怯袀涠?。VB.NET之旅(三同享成員一起對VB.NET充滿了獵奇與曉得的巴望?!俺舜缶肿兞客?還有啥好辦法嗎?”我迫不急待地想知道成果?!澳軌蜻\用同享成員。”大李依然是那么淡漠然,“VB.NET如今是撐持真實的面向目標編程,能夠承繼、運用多態(tài)、同
16、享成員和靜態(tài)成員。同享成員即是在一切類和所界說派生類的實例之間同享的辦法、屬性、字段和工作。一切運用類創(chuàng)立的目標都能夠拜訪一樣的數(shù)據(jù)、同享完結進程,并且收到一樣的激起工作。”“這么好呀,那怎樣完結呢?”我好象又回到了課堂上,滿腦都是無知的符號?!昂芎喡?在Public或Private成員潤飾符后加上Shared關鍵詞即可了。Shared關鍵詞指示一個或多個被聲明的編程元素將被同享。同享元素不關聯(lián)于某類或布局的特定實例。能夠經(jīng)過運用類名或布局稱號或許類或布局的特定實例的變量稱號限制同享元從來拜訪它們。你來看這段代碼Public Class ShareClassPublic Shared Shar
17、edValue As StringPublic Shared Sub ShareMethod(MsgBox("This is a shared method."End SubEnd ClassSubTestShared(Dim Shared1As New ShareClass('創(chuàng)立了類的一個實例.Dim Shared2As New ShareClass('創(chuàng)立了類的第二個實例.Shared1.SharedValue="Share Value1"'給同享字段賦值.Shared2.SharedValue="Share Va
18、lue2"'重寫同享字段的值ShareClass.ShareMethod('不必創(chuàng)立實例就能夠調用類的辦法.End Sub“有兩個關鍵,一個是同享成員若是是辦法或特點,我們不必創(chuàng)立實例就能夠直接用類名.共享成員的辦法進行調用;第二個關鍵,同享字段是僅有的,你來說說運轉后Shared1.SharesValue的值是多少?”“沒錯!”大李又一次綻放了會意的淺笑,真是對我的最高獎勵?!澳悄氵€不著手修正一下你的程序?”好!說做就做。已然同享特點在其調用的時分是不必實例化的,那么我最佳能憑借布局一個同享特點來完結。并且要能夠判別其實例是不是存在或是不是被毀掉,若是不存在就布局一
19、個新的窗體實例,若是存在就對其進行調用:PrivateShared m_vb6FormDefInstance As Form1Public Shared Property DefInstance(As Form1GetIf m_vb6FormDefInstance Is Nothing OrElse_m_vb6FormDefInstance.IsDisposed Then判別窗體實例是不是存在m_vb6FormDefInstance=New Form1(End IfDefInstance=m_vb6FormDefInstanceEnd GetSet(ByVal Value As Form1m_
20、vb6FormDefInstance=ValueEnd SetEnd Property在Form2中也參加相似的代碼,只不過把Form1改為Form2 。調用它是如此的便利: /Form1中的代碼Private Sub Button1_Click(ByVal sender As System.Object,ByVal eAs System.EventArgsHandles Button1.ClickMe.Hide(End Sub/Form2中的代碼Private Sub Button1_Click(ByVal sender As_System.Object,ByVal e As System.
21、EventArgs_Handles Button1.ClickMe.Hide(End SubPrivate Sub Form2_Closing(ByVal sender As Object,_Handles MyBase.ClosingEnd Sub趕忙運轉一下,不對呀,榜首個窗體里文本框改為“Henry的著作”后,再切換仍是不見了?我疑問地昂首看了看大李。“你再好好想想,首次發(fā)動的是啥?”大李模糊地說了一句。“首次發(fā)動的是作為主線程的Form1窗體呀!”我嘟啷著說?!澳敲碏orm1.DefInstance在哪呢?”大李這句話真是吵醒夢中人呀!我馬上著手:Module Module1Sub M
22、ain(Application.Run(Form1.DefInstanceEnd SubEnd Module并把Module1設為發(fā)動項目。運轉運轉哈哈,一切都滿意!我開端喜愛上VB.NET了。VB.NET之旅(四類和布局剛上班,就被大李找去了?!癏enry,昨日對窗體的操作給你最大的領會是啥?”“當然有領會,最深的形象即是VB.NET中類是無所不在了,連窗體都變成了一個類?!蔽疑钣懈惺艿卣f。“沒錯,類是咱們用來布局VB.NET應用程序時的最基本的編程布局了。你也學習過最基本的面向目標編程了,那么你能告訴我,布局與類有啥相似之處與不一樣之處嗎?”“好的?!蔽铱谥写饛椭?心里仍是有點不以為然,“
23、布局和類,都是對成員的封裝辦法,可是類能夠撐持承繼”大李一邊點著頭,一邊聽我說,聽到我結尾支吾著沒了聲響才抬起頭“還有呢?”“沒了。”我這時才開端心中發(fā)慌?!昂呛?一樣之處我想你心中仍是知道的,它們都富含成員,包括布局函數(shù)、辦法、特點、字段、常量、枚舉和工作。都可以完結接口,都有同享的布局函數(shù)。”“對不住,結尾那一句,都有布局函數(shù)是啥意思?布局的布局函數(shù)我從來沒有自個界說過?!贝罄铖R上寫下了這一段代碼:Structure SHenryPublic x,y As IntegerPublic Sub New(ByVal x As Integer,ByVal y As IntegerMe.x=xMe
24、.y=yEnd SubEnd StructureSub main(Dim H1As SHenry=New SHenry(Dim H2As SHenry=New SHenry(2,1End Sub“真的呢,能夠完結布局的布局函數(shù)!”我還一向沒有注意過這個疑問。“可是,你只界說過一個帶參數(shù)的布局函數(shù),H2的實例化我是知道的,可是H1怎樣也能經(jīng)過編譯器檢測呢?”其實我心中更想問的是布局怎樣也能實例化成目標,那和類真的很象呀。“緣由么,”大李推了推眼鏡,“每個布局都隱式地具有Public 無參數(shù)實例構造函數(shù),該布局函數(shù)產(chǎn)生布局的默許值。所以你平常不寫布局函數(shù),也一樣能夠New出一個布局來,對吧?事實上
25、,咱們反而在布局類型聲明中不行能聲明無參數(shù)實例布局函數(shù)。只能聲明參數(shù)化實例布局函數(shù)?!薄岸寄軌蛴胣ew來實例化,布局和類在內(nèi)存分配上莫非也是一樣的嗎?”這個疑問我一向挺不知道,正巧借這個論題問一下?!霸谶@上面,不一樣可就大了?!笨吹酱罄顫M面笑容的姿態(tài),我就曉得問到點子上了,馬上擺開姿勢,作仔細傾聽狀。“簡略來說,布局是值類型,而類是引證類型。因而,布局運用倉庫分配,類運用堆分配?!笨吹轿疑n茫的雙眼,大李笑了笑,在電腦上飛快地寫了個示例:Class CHenryPublic z As Integer=0能對非靜態(tài)成員初始化也是一個差異End ClassSub main(Dim H1As SHen
26、ry=New SHenry(0,2'賦給H1.x=0Dim H2As SHenry=H1H2.x=26Dim R1As New CHenry('R1.z也是等于0Dim R2As CHenry=R1R2.z=26Console.WriteLine("H1.x="&H1.x&",H2.x="&H2.xConsole.WriteLine("R1.z="&R1.z&",R2.value="&R2.zEnd Sub“你看一下成果大概是啥?”大李一邊說,一邊運轉
27、了程序:H1.x=0,H2.x=26R1.z=26,R2.value=26 “這即是值類型和引證類型的不一樣。布局的實例H2.x 賦值并不影響H1.x ,這是由于盡管它們同歸于一種SHenry布局,但它們都有各自的存儲空間。相反,給R2.z賦值26后; 則會影響R1 和R2 都引證的目標”“說得更知道一點,類作為引證類型,是存儲在運轉時的堆上,只能經(jīng)過引證該存儲來拜訪它們,不能直接拜訪。引證類型的變量總是包括該類型的值引證,或包括空引證。空引證不引證任何內(nèi)容;除分配空引證外,對空引證進行的任何操作都是無效的。引證類型的變量賦值只會創(chuàng)立引證的一個副本,而不是所引證的值的副本。它們實踐上都是會指向
28、同一塊存儲區(qū)的?!贝罄钍种噶酥高\轉的成果?!安季质侵苯哟鎯υ趥}庫上,要么在數(shù)組中,要么在另一個類型中。當包括布局實例的方位被毀掉時,布局實例也會被毀掉。值類型總是能夠直接拜訪。咱們不能創(chuàng)立對值類型的引證,也不能引證已毀掉的值類型實例。值類型的變量總是包括此類型的值。與引證類型不一樣,值類型的值不能為空引證,也不能引證派生附近程度較大的類型的目標。值類型的變量賦值會創(chuàng)立所賦的值的副本,當然會新拓荒一塊內(nèi)存區(qū)來保管值。”“哦,我知道了。它們還有啥差異沒有?”我對布局和類的差異首次有了深入的感受。“當然有許多,比方一切的布局成員都默以為Public,類變量和常量默以為Private,其他的類成員默以
29、為Public;布局成員不能聲明為Protected,類成員能夠;布局進程不能處置工作,類進程能夠;結構變量聲明不能指定初始值、New 關鍵詞或數(shù)組初始巨細,類變量聲明能夠。”大李喝了口水,停了一下,然后持續(xù)說。“布局從不停止,所以公共言語運行庫從不在任何布局上調用Finalize 辦法;類可由廢物收回器停止,廢物收回器會盯梢未完結的引證直到某個特定的實例,當檢測到?jīng)]有剩余的活動引證時,廢物收回器將在類上調用Finalize?!薄斑@個我能夠知道,由于布局是值類型,是由系統(tǒng)統(tǒng)一辦理內(nèi)存,不是引證,所以不會對內(nèi)存形成危害?!蔽医又f了兩句。“還有,你方才也說到了它們之間一個很重要的差異:布局是不行
30、承繼的,而類能夠承繼。其實布局自身是從ValueType 類隱式承繼下來的。數(shù)據(jù)類型可分為值類型和引證類型。值類型要么是倉庫分配的,要么是在布局中以內(nèi)聯(lián)辦法分配的。引證類型是堆分配的。引證類型和值類型都是從結尾的基類Object 派生出來的。當值類型需求充任目標時,就在堆上分配一個包裝,該包裝能使值類型看上去像引證目標一樣,并且將該值類型的值仿制給它。該包裝被加上符號,以便系統(tǒng)曉得它包括一個值類型。這個進程稱為裝箱,其反向進程稱為撤銷裝箱。裝箱和撤銷裝箱能夠使任何類型像目標一樣進行處置?!薄芭?我知道為啥布局也能被實例化成目標了!”我心中喜不自禁?!邦惖某欣^我在用C+和Java時也常常運用,可
31、是VB6是不撐持承繼的,前次您說到VB.NET能夠撐持承繼了,它是怎樣做到的呀!”VB.NET之旅(五類的承繼“類的承繼?”大李點答應,“從前許多人批判VB的功用不完善時,都會加上這個條件??墒侨缃馰B.NET 中現(xiàn)已是比較完善的面向目標編程辦法了。方才咱們也說到過,類與VB.NET 的布局相似,讓咱們能夠界說封裝一組有關項的數(shù)據(jù)類型。然而與布局的一個重要差異即是,VB.NET 類能夠承繼和擴展其他類的特性。作為新類的根底的類稱為基類。從基類派生的類稱為派生類。派生類承繼基類中界說的一切字段、特點、辦法和工作。你看,咱們只需對類進行一次開發(fā)和調試,就能夠將其作為其他類的基礎重復運用?!薄邦惖某?/p>
32、繼的概念我學過的,在VB.NET中是如何來實踐演練呢?”我仍是堅持著問。“我寫段代碼給你看一下吧,俗語不是說,百聞不如一見嗎?”大李戲弄了兩句,噼噼啪啪地開端敲打起鍵盤來:Public Class CBaseHenryPrivate x As Integer=10Protected y As IntegerSub New(Console.WriteLine("基類的布局"End SubProtected Overrides Sub Finalize(Console.WriteLine("基類的析構"MyBase.Finalize(End SubPubli
33、c Overridable Function GetY(ByVal x As IntegerAs IntegerMe.y=me.x+xprivate類型的me.x只能在基類中運用Console.WriteLine("基類的GetY辦法,成果為:"&Me.yReturn Me.yEnd FunctionPublic Sub OldY(Console.WriteLine("基類的OldY辦法"End SubEnd Class“你看,這是一個基類,我再給你寫個承繼自該類的派生類?!彼贿呎f一邊持續(xù)寫: Public ClassCDerivedHenry
34、Inherits CBaseHenrySub New(MyBase.New(注意:這句話要放在sub內(nèi)的榜首句Console.WriteLine("派生類的布局"End SubProtected Overrides Sub Finalize(Console.WriteLine("派生類的析構"MyBase.Finalize(End SubPublic Overrides Function GetY(ByVal x As IntegerAsIntegerMe.y=x*10protected類型的me.y卻能夠在派生類中使用Console.WriteLine
35、("派生類的GetY辦法,成果為:"&Me.yReturn Me.yEnd FunctionPublic Sub NewY(Console.WriteLine("派生類的新辦法"End SubEnd Class“你看清了吧,咱們經(jīng)過聲明Inherits關鍵詞,來標識該類的基類是誰,若是沒有標識的類,比方CBaseHenry,VB.Net就會視其為派生自Object基類,這是種隱式承繼,和布局是隱式承繼自ValueType 類的辦法是一樣的?!贝罄钪钢聊桓艺f明著?!澳沁@些overrides與overload標識是啥意思呀?”我隱約感受到它們的含
36、義,卻無法知道地說出來。“咱們運用承繼,也要答應派生類中的某些特點或辦法有與基類不一樣的行動,咱們想重寫它,但基類也得要附和你才干重寫呀,不然不就會發(fā)作命名抵觸了嗎?由于派生類的目標是能夠運用基類的共用成員的,那怎樣曉得哪些基類的辦法與特點是被派生類重寫了呢?所以就有必要有一個約好:咱們在基類頂用Overridable潤飾符來標識答應基類中的特點或辦法在其派生類中被重寫,沒有標識的其實即是默以為有NotOverridable潤飾符來隱式地標識,用于提示編譯器該特點或辦法不行被重寫;然后在派生類重寫時,咱們就用Overrides潤飾符來標識哪些是重寫自基類中界說的Overridable 特點或辦
37、法?!贝罄铈告傅纴?“咱們來演練一下對派生類的操作吧。”Public Sub Main(Dim obj As CDerivedHenry=New CDerivedHenry(obj.GetY(4'調用派生類的GetY辦法obj.OldY('調用基類的oldY辦法obj.NewY('調用派生類的NewY辦法End Sub然后大李按了一下F5鍵,在“輸出”窗口中就呈現(xiàn)了如下的運轉成果:基類的布局開始運轉New CDerivedHenry(派生類的布局派生類的GetY辦法,成果為:40obj.GetY(4的運轉成果=4*10,不等于基類的(4+10基類的OldY辦法obj.O
38、ldY(的運轉成果派生類的新辦法obj.NewY(的運轉成果派生類的析構基類的析構“你看,你只在Main中實例化了一個派生類的對象,為啥先會呈現(xiàn)基類的布局?”大李問?!斑@個么,”我開端在代碼中檢查起來,“是這句了。”我手指著派生類里的這段代碼:Sub New(MyBase.New(注意:這句話要放在sub內(nèi)的榜首句Console.WriteLine("派生類的布局"End Sub“沒錯,咱們有必要要注意這一點,即是派生類的布局函數(shù)與析構函數(shù)都有必要從頭編寫。New 布局函數(shù)通常用于翻開文件、銜接到數(shù)據(jù)庫、初始化變量以及處置任何需求在可運用目標前完結的其他使命。咱們有必要在Sub New 布局函數(shù)中的榜首行代碼運用句子MyBase.New(,來調用類層次布局中該類的基類的布局函數(shù),以取得基類的性質。析構則是在Sub Finalize中履行完對派生類的的整理使命,如保管狀況信息、封閉文件和與數(shù)據(jù)庫的銜接,以及履行在開釋目標前有必要完結的其他使命之后,在析構函數(shù)的結尾一句運用句子MyBase.Finalize( 顯式調用其基類的Sub Finalize 辦法,以析構MyBase.New (布
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖北陽臺防滑施工方案
- 學校修繕工程施工方案
- 彩鋼瓦外墻膩子施工方案
- 廠區(qū)大門施工方案
- 外墻立面改造施工方案
- 2025年多晶氟化鎂(MGF2)項目建議書
- 2025屆物理組復習計劃與課外輔導
- 2025年度水井承包及水資源優(yōu)化配置合同
- 二零二五年度旅館房屋租賃及配套設施合同
- 2025年度智能停車場地下車位租賃服務合同
- 縣國有企業(yè)改革轉型方案
- 高中家長會 高考考前家長會家長心理調整課件
- 住宅老舊電梯更新改造方案
- 《主題六 研學旅行我做主》教學設計-2023-2024學年六年級下冊綜合實踐活動遼師大版
- 數(shù)字賦能農(nóng)村特色產(chǎn)業(yè)發(fā)展的實證研究
- Unit 1 My school Part B Let's talk(教學設計)-2023-2024學年人教PEP版英語四年級下冊
- 新版華師大版八年級下數(shù)學教案全冊
- 高中主題班會 《哪吒2》:成長與蛻變課件-高一下學期開學主題班會
- 電力工程建設中的風險控制與管理措施
- 《教育強國建設規(guī)劃綱要(2024-2035年)》解讀與專題培訓
- 抑郁復學申請書
評論
0/150
提交評論