您好我是C#的新手,目前正在使用某些第三方API处理应用。我遇到了两行代码,如果你能提供帮助,我会很感激。下面的代码类似于我的实际示例代码
bank.Account.NewAcc += delegate (Customer customerInfo) {
Console.WriteLine ("Customer Name : " + customerInfo.Name);
};
bank.Account.NewAcc
是一个事件,而Customer
是一个类。
以下是问题:
我们可以创建object
而非method
的代理吗?
我该如何调用它?我没有提供API提供的任何其他信息
非常感谢。
答案 0 :(得分:0)
请根据我的知识在下面找到您的问题的答案:
没有。你不能。因为委托意味着功能指针。他们只能持有函数的引用。方法的签名必须与代表的签名相匹配。
可以通过两种方式调用与事件关联的委托作为事件处理程序。首先,当您以编程方式调用事件时,将引发事件。
答案 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)
我不太确定“对象”代表的意思。我怀疑你可以。代表表示要调用的方法列表。您不能只为其分配任何object
值。
您不会调用(或引发)事件。 API确实如此。从NewAcc
的名称判断,我想在创建新帐户时会引发该事件。尝试对bank.Account
执行此操作。您可能会看到客户信息被打印出来。显然,这不会100%起作用。您必须查看bank.Account
内部以确切知道事件何时被提出(或者只是询问撰写该事件的人)。
请注意,委托可以使用lambda表达式编写:
bank.Account.NewAcc += (customerInfo) => Console.WriteLine ("Customer Name : " + customerInfo.Name);