VB的委託和事件

2021-06-15 18:54:06 字數 3253 閱讀 5933

委託和事件

委託,這個詞一聽被邪乎。幾年前我還以為和律師什麼的有關係。可事實上「委託」就是system.delegate

類。它是乙個類,這就意味著它是乙個資料型別,而且是乙個引用型別。它能夠引用物件的方法(例項方法)和類的方法(靜態方法、在vb

裡的shared

方法)。

使用委託可以概括為三步:宣告、例項化、呼叫。

public

class class1

shared

sub main()

dim cls2 as

new class2

'例項化

dim d1 as onedelegate = addressof cls2.fun1

'呼叫d1() '實際上執行fun1

'例項化

dim d2 as onedelegate = addressof class2.fun2

'呼叫d2() '實際上執行fun2

console.readline()

endsubend

class

'宣告委託

delegate

sub onedelegate()

public

class class2

'例項方法

public

sub fun1()

console.writeline("fun1")

endsub'shared方法

public

shared

sub fun2()

console.writeline("fun2")

endsubend

class

這樣直接呼叫委託沒有什麼意義。因為可以直接呼叫方法。那樣更加簡單。使用委託最多的其實是事件,因為事件是由委託實現的。現如今大多數程式都是事件驅動的。要使用事件必須正確作如下幾件事:

宣告事件

引發事件

編寫事件處理程式

把時間處理程式和事件聯絡起來

宣告事件

通常我們都是在編寫某乙個類的時候把事件新增給類。請看下面這段**:

public

class class3

'該類具有乙個屬性prop。當該屬性發生改變之後引發事件propchanged

'新增事件propchanged

public

event propchanged()

'把事件新增給乙個類,指定該類可以引發該事件。

'要引發事件必須使用raisevent,就像下面這樣。(在屬性的set裡面)

'注意:使用事件必須注意,事件不能具有返回值、可選引數、paramarray引數。

private _prop as

string

'引數prop

public

property prop() as

string

getreturn

me._prop

endgetset(byval value as

string)

me._prop = value

'當這個引數發生改變之後觸發事件propchanged

raiseevent propchanged()

'這樣事件就發生了。但是讓這個事件發生絕對不是

'最終的目的。人們使用事件機制,是為了在事件發生

'的時候做點什麼事情。所以,必須再使用這個類的

'程式裡寫乙個函式作為事件處理程式。

'就像class1.cls3_propchanged(那樣)

endset

endproperty

endclass

public

class class1

shared

sub main()

dim cls2 as

new class2

'例項化

dim d1 as onedelegate = addressof cls2.fun1

'呼叫d1() '實際上執行fun1

'例項化

dim d2 as onedelegate = addressof class2.fun2

'呼叫d2() '實際上執行fun2

dim cls1 as

new class1

cls1.testevent()

console.readline()

endsub'宣告class3物件

private cls3 as class3

'事件處理程式。準備用來處理物件cls3的propchanged事件。

'就是說,當物件cls3.prop被改變之後,這個函式被執行。

'這就需要把事件處理程式,也就是這個方法,和事件聯絡起來。

'然後再為cls3.prop賦值。就像testevent方法所作的那樣。

private

sub cls3_propchanged()

'把事件和事件處理程式分開

removehandler cls3.propchanged, _

addressof

me.cls3_propchanged

console.writeline("cls3_propchanged被執行")

endsubprivate

sub testevent()

me.cls3 = new class3

'把事件處理程式和事件聯絡起來。

addhandler cls3.propchanged, addressof

me.cls3_propchanged

'注意:

'還有另一種把事件和事件處理程式聯絡起來的方法,

'就是使用withevents和handles。非常常見,所以不詳述。

'為屬性賦值

me.cls3.prop = "改變屬性"

'事件這時就發生了,事件處理程式被執行。

endsub

endclass

'宣告委託

delegate

sub onedelegate()

public

class class2

'例項方法

public

sub fun1()

console.writeline("fun1")

endsub'shared方法

public

shared

sub fun2()

console.writeline("fun2")

endsubend

class

VB委託和事件

2011 01 25 10 26 28 分類 vb 標籤 舉報 字型大小大中 小訂閱 在委託和事件中,委託的作用就是當事件觸發是會有哪些東西被執行 比如下邊引用的這個例子 當小偷偷東西時,警察會罰錢,自願反扒手會把小偷打一頓 在這裡 小偷偷東西是乙個事件 警察會罰錢,自願反扒手會把小偷打一頓,是該事...

委託和事件

主要過程如下 1.在後台 中,我們可以定義處理程式方法alartrang 2.然後定義委託,引用到處理程式方法的例項。3.最後將委託新增到事件中。從而,引發事件時就會呼叫相關的事件處理方法。若要使用在另乙個類中定義的事件,必須定義和註冊乙個事件處理程式。事件 處理程式必須具有與為事件宣告的委託相同的...

委託和事件

委託的宣告 public delegate void mydelegate string str 注1.委託的定義和方法的定義類似,只是在前面加了乙個delegate,但委託不是方法,它是一種型別。是一種特殊的型別,看成是一種新的物件型別比較好理解。用於對與該委託有相 同簽名的方法呼叫。2.委託相當...