【问题标题】:Delegate and Event : C#代表和事件:C#
【发布时间】:2014-04-19 04:31:07
【问题描述】:

我有一个关于 C# 中的事件和委托的问题。我在许多代码中看到他们使用eventdelegate 关键字来创建事件触发器。让我们先跳过它,我比较关心的是事件触发的函数,或者更确切地说,这里调用的函数是作用域 sn-p。

public delegate void EventHandler();
class Program
{
    //Note : Assigning the evet to the delegate
    public static event EventHandler _show;

    static void Main(string[] args)
    {
        _show += new EventHandler(Dog);
        _show += new EventHandler(Cat);
        _show.Invoke();                   
    }

    static void Dog() {
        Console.WriteLine("Doggie");
    }

    static void Cat(){
        Console.WriteLine("Pussy");
    }

}

`

如您所见,有几个函数称为 Dog / Cat。返回类型为void,但当您执行时,它看起来像string 值返回给事件_show。有人可以解释这里发生了什么吗?

【问题讨论】:

  • There return types are void but when you execute it looks like a string value is returned to the event _show 你能解释一下你的意思吗? _show.Invoke() 方法不返回任何内容,_show() 也不返回。它只是无效的。
  • 你是说+= 让你认为它是一个字符串?
  • 忘记我说的了,你能解释一下这里发生了什么吗?
  • OT:公共成员不应以 _ 开头。将其命名为event Show

标签: c# c++ .net c#-4.0


【解决方案1】:

您错误地解释了语法。

static void Main(string[] args)
    {
        _show += new EventHandler(Dog);
        _show += new EventHandler(Cat);
        _show.Invoke();                   
    }

_show += new EventHandler(Dog) 只会将Dog() 的函数调用排队。因此,这就像将所有函数调用保存在一个队列中,然后按 FIFO 顺序执行它们。

你在这里没有返回任何东西。只有你的所有函数被顺序调用,然后值被打印出来。

【讨论】:

  • 不,+= 不会对任何函数调用进行排队。它订阅一个事件的方法,但这可以在 0 或 1000 个函数调用中使用。
【解决方案2】:

show 事件只需运行Dog,然后运行Cat 方法。显然,它会打印出“Doggie”和“Pussy”。

如果要返回字符串:

static string Dog() {
       // Console.WriteLine("Doggie");
       return "Doggie";
}

并更改 delegate 贴花:

public delegate string EventHandler();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多