vb的委託學習

2021-04-08 19:30:08 字數 3349 閱讀 2619

委託和事件

委託,這個詞一聽被邪乎。幾年前我還以為和律師什麼的有關係。可事實上「委託」就是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()

end

subend

class

'宣告委託

delegate

sub onedelegate()

public

class class2

'例項方法

public

sub fun1()

console.writeline("fun1")

end

sub'shared方法

public

shared

sub fun2()

console.writeline("fun2")

end

subend

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

end

getset(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()

end

sub'宣告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被執行")

end

subprivate

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")

end

sub'shared方法

public

shared

sub fun2()

console.writeline("fun2")

end

subend

class

VB的委託和事件

委託和事件 委託,這個詞一聽被邪乎。幾年前我還以為和律師什麼的有關係。可事實上 委託 就是system.delegate 類。它是乙個類,這就意味著它是乙個資料型別,而且是乙個引用型別。它能夠引用物件的方法 例項方法 和類的方法 靜態方法 在vb 裡的shared 方法 使用委託可以概括為三步 宣告...

VB委託和事件

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

委託的學習

委託 什麼是委託,怎麼去定義乙個委託,還有委託的呼叫。概念 委託的使用 lambda 擴充套件方法 方法傳方法 匿名方法 委託 是使用者定義的一種資料型別 其型別是用來存放方法指標的,就是委託包含的是方法的位址。定義乙個委託 思考以前我們定義乙個類的時候 有乙個關鍵字 還有就是類的名稱,而類裡面包含...