Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,将EventHandler类型var等同于委托意味着什么? 我认为自己是新来的。我遇到过这段if代码,无法理解它的功能_C#_Delegates_Event Handling - Fatal编程技术网

在C#中,将EventHandler类型var等同于委托意味着什么? 我认为自己是新来的。我遇到过这段if代码,无法理解它的功能

在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

我还没有看到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在哪里等于委托

这是一个很好的例子

(为了简单起见,删除了属性。)

在本例中,您看到的是一种从“内联”代码块创建委托的方法。但如今,这是一种更常见的实现方式。(匿名方法在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
来说很不寻常。