大致來說,委託是乙個類,該類內部維護著乙個字段,指向乙個方法。事件可以被看作乙個委託型別的變數,通過事件註冊、取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。
□ 通過委託執行方法
class program
}
publicclass example
void print(string str)
}以上,○ 在clr執行時,委託dosth實際上就乙個類,該類有乙個引數型別為方法的建構函式,並且提供了乙個invoke例項方法,用來觸發委託的執行。
○ 委託dosth定義了方法的引數和返回型別
○ 通過委託dosth的建構函式,可以把符合定義的方法賦值給委託
○ 呼叫委託的例項方法invoke執行了方法
但,實際上讓委託執行方法還有另外一種方式,那就是:委託變數(引數列表)
publicclass example
void print(object sender, eventargs e)
}以上,○ 委託dosth的引數列表和方法print的引數列表還是保持一致
○ 委託dosth中的引數object sender通常用來表示動作的發起者,eventargs e用來表示動作所帶的引數。
而實際上,委託變數(引數列表),事件就是採用這種形式執行方法的。
□ 通過事件執行方法
publicclass example
void print(object sender, eventargs e)
}以上,○ 宣告了事件mydosth,事件的型別是dosth這個委託
○ 通過+=為事件註冊委託
○ 通過dosth委託的建構函式為事件註冊委託例項
○ 採用委託變數(引數列表)這種形式,讓事件執行方法
而且,通過+=還可以為事件註冊多個委託。
publicclass example
void print(object sender, eventargs e)
void say(object sender, eventargs e)
}以上,通過+=為事件註冊1個或多個委託例項,實際上,還可以為事件直接註冊方法。
publicclass example
void print(object sender, eventargs e)
void say(object sender, eventargs e)
}□ 通過eventhandler執行方法
先來看eventhandler的源**。
可見,eventhandler就是委託。現在就使用eventhandler來執行多個方法。
publicclass example
void print(object sender, eventargs e)
void say(object sender, eventargs e)
}
總結:○ 委託就是乙個類,也可以例項化,通過委託的建構函式來把方法賦值給委託例項
○ 觸發委託有2種方式: 委託例項.invoke(引數列表),委託例項(引數列表)
○ 事件可以看作是乙個委託型別的變數
○ 通過+=為事件註冊多個委託例項或多個方法
○ 通過-=為事件登出多個委託例項或多個方法
○ eventhandler就是乙個委託
C 中委託和事件的區別
大致來說,委託是乙個類,該類內部維護著乙個字段,指向乙個方法。事件可以被看作乙個委託型別的變數,通過事件註冊 取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。通過委託執行方法 class program public class examplevoid print str...
C 中委託和事件的區別
大致來說,委託是乙個類,該類內部維護著乙個字段,指向乙個方法。事件可以被看作乙個委託型別的變數,通過事件註冊 取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。class program public class example void print string str ...
C 中委託和事件的區別
大致來說,委託是乙個類,該類內部維護著乙個字段,指向乙個方法。事件可以被看作乙個委託型別的變數,通過事件註冊 取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。通過委託執行方法 class program public class examplevoid print str...