如何调用委托对象

时间:2018-06-01 05:38:46

标签: c# events delegates

您好我是C#的新手,目前正在使用某些第三方API处理应用。我遇到了两行代码,如果你能提供帮助,我会很感激。下面的代码类似于我的实际示例代码

bank.Account.NewAcc += delegate (Customer customerInfo) {
   Console.WriteLine ("Customer Name : " + customerInfo.Name);
};

bank.Account.NewAcc是一个事件,而Customer是一个类。

以下是问题:

  1. 我们可以创建object而非method的代理吗?

  2. 我该如何调用它?我没有提供API提供的任何其他信息

  3. 非常感谢。

3 个答案:

答案 0 :(得分:0)

请根据我的知识在下面找到您的问题的答案:

1。我们可以创建对象的委托而不是方法吗?

没有。你不能。因为委托意味着功能指针。他们只能持有函数的引用。方法的签名必须与代表的签名相匹配。

2。我怎么能调用它?我没有从API

提供任何其他信息

可以通过两种方式调用与事件关联的委托作为事件处理程序。首先,当您以编程方式调用事件时,将引发事件。

答案 1 :(得分:0)

在示例代码中,具有类型CustomerInfo的单个参数的匿名委托已绑定到名为NewAcc的事件。

一旦NewAcc事件被触发,绑定的代理就会被执行,触发\提升事件的代码可能是这样的:

  

public Class BankAccount {.....

    protected virtual void OnNewAcc(CustomerInfo customerInfo)
    {
        CustomerEventHandler handler = NewAcc;
        if (handler != null)
        {
            handler(this, customerInfo);
        }
    }

    public event CustomerEventHandler NewAcc;
     
    

....}

  

我希望这能回答你的问题。

答案 2 :(得分:0)

  1. 我不太确定“对象”代表的意思。我怀疑你可以。代表表示要调用的方法列表。您不能只为其分配任何object值。

  2. 不会调用(或引发)事件。 API确实如此。从NewAcc的名称判断,我想在创建新帐户时会引发该事件。尝试对bank.Account执行此操作。您可能会看到客户信息被打印出来。显然,这不会100%起作用。您必须查看bank.Account内部以确切知道事件何时被提出(或者只是询问撰写该事件的人)。

  3. 请注意,委托可以使用lambda表达式编写:

    bank.Account.NewAcc += (customerInfo) => Console.WriteLine ("Customer Name : " + customerInfo.Name);
    
相关问题