委託和事件
委託,這個詞一聽被邪乎。幾年前我還以為和律師什麼的有關係。可事實上「委託」就是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 擴充套件方法 方法傳方法 匿名方法 委託 是使用者定義的一種資料型別 其型別是用來存放方法指標的,就是委託包含的是方法的位址。定義乙個委託 思考以前我們定義乙個類的時候 有乙個關鍵字 還有就是類的名稱,而類裡面包含...