在C#中,将EventHandler类型var等同于委托意味着什么? 我认为自己是新来的。我遇到过这段if代码,无法理解它的功能
我还没有看到EventHandler在哪里等于委托?那有什么用?当然,下面是完整代码的摘录,因为我希望这足以让人理解将事件处理程序等同于委托的一般概念。谢谢在C#中,将EventHandler类型var等同于委托意味着什么? 我认为自己是新来的。我遇到过这段if代码,无法理解它的功能,c#,delegates,event-handling,C#,Delegates,Event Handling,我还没有看到EventHandler在哪里等于委托?那有什么用?当然,下面是完整代码的摘录,因为我希望这足以让人理解将事件处理程序等同于委托的一般概念。谢谢 public class xyz : ViewModelBase { protected EventHandler modelChanged = null; public xyz ( int a, int b) { this.modelChanged = delegate
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在哪里等于委托
这是一个很好的例子
(为了简单起见,删除了属性。)
在本例中,您看到的是一种从“内联”代码块创建委托的方法。但如今,这是一种更常见的实现方式。(匿名方法在C#2中引入;lambda表达式在C#3中引入。)lambda表达式和匿名方法都可以转换为委托实例;一些lambda表达式也可以转换为for代码,需要分析表达式中的逻辑
如果您对学员一般来说比较陌生,您可能还想阅读我的文章
我还没有看到EventHandler在哪里等于委托
这是一个很好的例子
(为了简单起见,删除了属性。)
在本例中,您看到的是一种从“内联”代码块创建委托的方法。但如今,这是一种更常见的实现方式。(匿名方法在C#2中引入;lambda表达式在C#3中引入。)lambda表达式和匿名方法都可以转换为委托实例;一些lambda表达式也可以转换为for代码,需要分析表达式中的逻辑
如果您对委托基本上是新手,您可能还想阅读我的文章。如果您认为它是C/C++
modelChanged
本质上是一个函数指针,在C中,这种类型的功能是通过委托提供的。有几种类型的代理,如果您愿意,可以在msdn上阅读它们,但为了简洁起见,我不想讨论这些。实际上,您正在声明一个EventHandler
,它是一种委托类型。然后在xyz
中,您实际上定义了方法并将其分配给modelChanged
。稍后在代码中,如果调用modelChanged
,它将导致执行xyz
中分配给它的代码。如果你认为它是C/C++modelChanged
本质上是一个函数指针,在C中,这种类型的功能是通过委托提供的。有几种类型的代理,如果您愿意,可以在msdn上阅读它们,但为了简洁起见,我不想讨论这些。实际上,您正在声明一个EventHandler
,它是一种委托类型。然后在xyz
中,您实际上定义了方法并将其分配给modelChanged
。稍后在您的代码中,如果调用modelChanged
,将导致执行xyz
中分配给它的代码。An是具有特定签名的委托人
:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void EventHandler(
Object sender,
EventArgs e
)
如果您对等号感到困惑,它不是将处理程序等同于委托,而是将委托分配给modelChanged
属性。An是一个带有特定签名的委托
:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void EventHandler(
Object sender,
EventArgs e
)
如果您对等号感到困惑,它不是将处理程序等同于委托,而是将委托分配给
modelChanged
属性。EventHandler只是microsoft声明的委托类型,因此它可以用作任何其他委托,您可以在类中拥有它的一个实例,并使用匿名委托分配实现,就像在代码中一样。像这样使用它不是一种最佳做法,因为它有一些MS想要的特殊用途。EventHandler只是microsoft声明的一种委托类型,因此它可以用作任何其他委托,您可以在类中使用它的实例,并使用匿名委托(如代码中的匿名委托)分配实现。像这样使用它不是一种最佳做法,因为它有一些女士想要的特殊用途。EventHandler
是一个委托
:作为一个点,它不是比较意义上的“等同”,而是实际上对变量EventHandler
的赋值是一个委托
:作为一个点,它不是比较意义上的“等值”,但实际上是对变量的赋值@“Jon Skeet”“谢谢你的回复。我仍然在浏览它,所有的网址等等。。。我觉得这很难理解,但我想,一旦我看完了他们所有和所有的参考资料,我可能会把你的回答标记为一个答案。这不是直观的东西。@user1298925:您的代码中没有事件,尽管这对于EventHandler
@“Jon Skeet”来说很少见。谢谢您的回复。我仍然在浏览它,所有的网址等等。。。我觉得这很难理解,但我想,一旦我看完了他们所有和所有的参考资料,我可能会把你的回答标记为一个答案。这不是直观的东西。@user1298925:代码中没有事件,尽管这对于EventHandler
来说很不寻常。