成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

VB.NET對象基礎概念詳解

開發 后端
VB.NET對象的作用在實際編程中是非常重要的。首先應當弄清的就是這一方面的基礎知識。通過本文介紹的內容大家應該可以掌握這一知識。

VB.NET編程語言是一款完全面向對象的語言。那么對于VB.NET對象的知識是初學者們在學習過程中值得注意的。下面就讓我們一起來對VB.NET對象的基本概念進行一個解讀,加深對此的了解。#t#

VB.NET對象的終止

在VB6中對象是在***引用移除后被終止的。換成另外一句話說,當沒有其它代碼引用這個對象的時候,這個對象將自動終止。具體觸發這個終止事件的是Class_Terminate。這種方法是使用引用計數來決定對象是否被終止的,是VB的一個直接的產品,它跟COM有緊密的聯系。

所以我們在需要終止這個對象的使用就調用Class_Terminate事件,使得很容易控制對象。但是它也有不足之處。很明顯地,雖然在兩個對象之間創建循環引用是很容易,但是它們將在內存中永遠地被運行。這正是在VB6中其中一種導致內存泄漏的缺陷。

這個內存泄漏問題在VB6以前的版本中是無法克服的。在VB6中,循環引用只發生在不同組件上。在VB6中,由相同的組件中的類創建而來的類將被自動終止,即使它們有循環引用。但是,如果對象來自不同的組件,循環引用問題就依然存在。這個是個很大的問題,它給許多VB開發人員帶來了麻煩。所以,在VB6中程序不得不尋求各種方法來終止對象。

不象COM,.NET不是使用引用計數來決定對象是否被終止的。取而代之的是,它使用了一個有名的“垃圾收集”方案來終止對象。可能聽到“垃圾收集”方案,您會云里霧里的,它的意思實際上是在VB.NET中我們不用預先定一個對象的終止方案,因此我們就不能準確地預測對象什么時候被終止的。下面我們詳細探討一下“垃圾收集”。 “垃圾收集”

在.NET中,引用計數不是一個基礎功能部分。相反地,對象是通過一個“垃圾收集”機理被終止。在某特定的時間(這決定特殊的規則),一個任務會在所有的對象中運行來查找哪些已經沒有被引用的VB.NET對象,并且將這些對象終止,即所謂的“垃圾收集”,名字是有點土,但更形象化。

由以上的討論我們可以知道,我們不能很準確地知道對象是在什么時候被終止的。我們除去對象的所有引用之后,并不是意味著對象快速地被終止了。此時對象還存在于內存中,直到垃圾收集處理程序運行之后才將它從內存中清除。

垃圾收集的主要好處是它清除了由引用計數帶來的循環應用問題。如果兩個對象互相有引用,并且在程序中沒有其它互相引用的代碼時,垃圾收集程序就會發現它們并將它們終止。這一點在COM中是不可能做到的,因為它們將在內存中永遠存在。

垃圾收集還有另外一個潛在的性能優點:在VB.NET對象被取消引用的時候不用花很多的精力在終止對象上;利用了垃圾收集,這個終止處理過程是在應用程序處于空閑狀態發生的,所以它減輕了對用戶的影響。但是,垃圾收集也會發生在應用程序處在運行裝載的時候,這時候系統將會運行在較低的系統資源下。

另外,我們可以通過編寫代碼來手動觸發垃圾收集處理程序:

 

  1. System.GC.Collect() 

以上這個處理過程要花一些時間,但是我們在想終止對象的時候也不必每次都執行這個處理過程。我們***是這樣來設計我們的應用程序:在***終止對象的時候才將對象從內存在清除。

Finalize方法

這個垃圾收集機理提供了一些功能,這些功能可以跟VB6中的Class_Terminate事件相媲美。當VB.NET對象被終止的時候,垃圾收集處理的代碼將調用Finalize方法,它就象Class_Terminate一樣可以進行一些***的內存清理工作。

  1. Protected Overrides 
    Sub Finalize()  
  2. (此處可以進行一些內存清理工作)  
  3. End Sub 

 

以上的這些代碼可以使用Protected(保護)作用域也可以使用重載關鍵字。這里值得指出的是,這種方法是在對象被垃圾收集機理終止之前被調用的,所以它跟Class_Terminate很是相似。
但是,我們還需要記得這種方法可以在對象被取消引用后被調用,它是通過***一段客戶代碼來實現的。

實現Dispose方法

在有些場合中Finalize方法是不可接收的。如果我們有一個VB.NET對象,它是使用一些非常有限的寶貴的系統資源,比如數據庫連接、文件處理或者系統鎖住等等。這時候我們就需要確保系統資源在對象被取消引用的時候是否被釋放。

為了實現這個目的,我們可以執行這樣一個方法,它可以被客戶代碼調用來強迫對象被清除并且釋放系統資源。雖然這不是一個很好的解決方案,但是它確實是很有效的。習慣上,這個方法就取名為Dispose,其代碼如下:

  1. Public Sub Dispose()  
  2. (此處可以進行一些清除工作)  
  3. End Sub 

 

在必要的時候,我們可以調用這個方法來確保內存清除工作的進行。
從上面的討論中,我們可以深刻地體會倒VB6和VB.NET在創建類和VB.NET對象的一些變化。下一個教程我們將詳細討論一下對象的繼承。

責任編輯:曹凱 來源: CSDN
相關推薦

2010-01-13 10:15:19

VB.NET Stri

2010-01-13 18:17:00

VB.NET通信程序

2010-01-12 18:28:28

VB.NET共享變量

2010-01-12 17:21:29

VB.NET對象

2010-01-08 14:56:18

VB.NET類定義

2010-01-19 10:12:39

VB.NET Butt

2010-01-21 10:48:18

VB.NET擴展方法

2010-01-21 12:55:08

VB.NET對象序列

2010-01-19 15:08:18

VB.NET對象成員

2010-01-07 14:52:41

VB.NET運算符

2010-01-18 19:29:31

VB.NET多維數組

2010-01-07 11:28:44

VB.NET Hash

2010-01-14 14:56:07

2010-01-21 16:17:32

VB.NET文件對象

2010-01-20 18:22:37

VB.NET泛型類型

2010-01-21 15:47:41

VB.NET變量生存周VB.net

2010-01-12 16:44:53

VB.NET數組

2010-01-12 18:40:22

VB.NET Form

2010-01-21 17:34:48

VB.NET Bool

2009-10-20 17:38:54

VB.NET Comp
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.日韩在线 | 伊人伊成久久人综合网站 | 久久国产精品-国产精品 | 91精品国产乱码麻豆白嫩 | 97精品久久| 日韩精品一区二区不卡 | 中文字幕一区二区三区精彩视频 | 亚洲a网| 国产精品久久久久一区二区三区 | 亚洲精品一区二区三区丝袜 | 免费性视频 | 成在线人视频免费视频 | 一区二区福利视频 | 国产亚洲成av人片在线观看桃 | 夜夜骑综合 | 日韩欧美国产精品 | 久久青草av | 日韩视频国产 | 日韩视频一区二区 | 欧美精品一区二区蜜桃 | 国产精品视频综合 | 国产精品免费一区二区三区四区 | 一级电影免费看 | 亚洲综合大片69999 | 午夜日韩精品 | 一区二区三区在线电影 | 99成人 | 在线2区 | 国产高潮好爽受不了了夜夜做 | 免费观看黄a一级视频 | 91免费电影 | 免费网站在线 | 亚洲aⅴ | 中国一级特黄毛片大片 | 亚洲欧美精品久久 | 三级成人片 | 日韩另类视频 | 精久久久久 | 久草新在线 | 91视频免费在观看 | 国产一区在线视频 |