[英]What does equating an EventHandler type var to a delegate mean in C#?
我認為我對CSharp陌生。 我在代碼中遇到過這一部分,並且無法理解它的作用。
我還沒看到EventHandler等於委托嗎? 那是做什么的? 當然,下面是完整代碼的摘錄,因為我希望這足以使某人理解將事件處理程序等同於委托的一般概念。 謝謝。
public class xyz : ViewModelBase
{
protected EventHandler modelChanged = null;
public xyz ( int a, int b)
{
this.modelChanged =
delegate
{
// check for changes.
if (this.ChangesExist == false)
{
// set the flag
this.ChangesExist = true;
// append the title.
currentTitle += "*";
_changeTitle(currentTitle);
}
};
}
}
我還沒看到EventHandler等於委托嗎?
public delegate void EventHandler(
Object sender,
EventArgs e
)
(為簡單起見,刪除了屬性。)
在這種情況下,您看到的是一個匿名方法 -一種從“內聯”代碼塊創建委托的方法。 如今, Lambda表達式是實現這一目標的一種更為普遍的方式。 (在C#2中引入了匿名方法;在C#3中引入了lambda表達式。)lambda表達式和匿名方法都可以轉換為委托實例。 一些lambda表達式也可以轉換為表達式樹,以用於需要分析表達式內邏輯的代碼。
如果您一般來說不熟悉代表,那么您可能還想閱讀我有關代表和事件的文章。
EventHandler
是具有特定簽名的delegate
:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void EventHandler(
Object sender,
EventArgs e
)
如果您對等號感到困惑,則不是將處理程序等同於委托,而是將委托分配給 modelChanged
屬性。
如果您認為它像C / C ++一樣,那么modelChanged
本質上是一個函數指針,在C#中,該類型的功能是通過委托提供的。 有幾種類型的代表,如果您想在msdn上閱讀,則可以閱讀有關它們的信息,但是為了簡潔起見,我不會贅述。 本質上,您在聲明一個EventHandler
,它是一種委托。 然后,在xyz
內部,您實際上是在定義方法並將其分配給modelChanged
。 稍后在代碼中,如果調用modelChanged
,它將導致執行在xyz
分配給它的代碼。
EventHandler只是Microsoft聲明的一種委托,因此它可以用作任何其他委托,您可以在類中擁有它的實例,並可以像代碼中那樣使用匿名委托來分配實現。 像這樣使用它不是最佳實踐,因為它具有MS打算達到的某些特殊目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.