C 中委託和事件的區別

2021-09-08 20:27:39 字數 2112 閱讀 4778

大致來說,委託是乙個類,該類內部維護著乙個字段,指向乙個方法。事件可以被看作乙個委託型別的變數,通過事件註冊、取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。

□ 通過委託執行方法

class program
}
public class example
void print(string str)
}
以上,

○ 在clr執行時,委託dosth實際上就乙個類,該類有乙個引數型別為方法的建構函式,並且提供了乙個invoke例項方法,用來觸發委託的執行。

○ 委託dosth定義了方法的引數和返回型別

○ 通過委託dosth的建構函式,可以把符合定義的方法賦值給委託

○ 呼叫委託的例項方法invoke執行了方法

但,實際上讓委託執行方法還有另外一種方式,那就是:委託變數(引數列表)

public class example
void print(object sender, eventargs e)
}
以上,

○ 委託dosth的引數列表和方法print的引數列表還是保持一致

○ 委託dosth中的引數object sender通常用來表示動作的發起者,eventargs e用來表示動作所帶的引數。

而實際上,委託變數(引數列表),事件就是採用這種形式執行方法的。

□ 通過事件執行方法

public class example
void print(object sender, eventargs e)
}
以上,

○ 宣告了事件mydosth,事件的型別是dosth這個委託

○ 通過+=為事件註冊委託

○ 通過dosth委託的建構函式為事件註冊委託例項

○ 採用委託變數(引數列表)這種形式,讓事件執行方法

而且,通過+=還可以為事件註冊多個委託。

public class example
void print(object sender, eventargs e)
void say(object sender, eventargs e)
}
以上,通過+=為事件註冊1個或多個委託例項,實際上,還可以為事件直接註冊方法。

public class example
void print(object sender, eventargs e)
void say(object sender, eventargs e)
}
□ 通過eventhandler執行方法

先來看eventhandler的源**。

可見,eventhandler就是委託。現在就使用eventhandler來執行多個方法。

public class example
void print(object sender, eventargs e)
void say(object sender, eventargs e)
}
總結:

○ 委託就是乙個類,也可以例項化,通過委託的建構函式來把方法賦值給委託例項

○ 觸發委託有2種方式: 委託例項.invoke(引數列表),委託例項(引數列表)

○ 事件可以看作是乙個委託型別的變數

○ 通過+=為事件註冊多個委託例項或多個方法

○ 通過-=為事件登出多個委託例項或多個方法

○ eventhandler就是乙個委託

C 中委託和事件的區別

大致來說,委託是乙個類,該類內部維護著乙個字段,指向乙個方法。事件可以被看作乙個委託型別的變數,通過事件註冊 取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。class program public class example void print string str ...

C 中委託和事件的區別

大致來說,委託是乙個類,該類內部維護著乙個字段,指向乙個方法。事件可以被看作乙個委託型別的變數,通過事件註冊 取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。通過委託執行方法 class program public class example void print st...

C 中委託和事件的區別

大致來說,委託是乙個類,該類內部維護著乙個字段,指向乙個方法。事件可以被看作乙個委託型別的變數,通過事件註冊 取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。通過委託執行方法 class program public class examplevoid print str...