我在理解代表方面有点困难。
我有一个委托,当输入 y 字符时我将调用它:
public delegate void respondToY(string msgToSend);
private respondToY yHandler;
我有一个订阅方法,以便调用代码可以在调用委托时要求收到通知:
public void Subscribe(respondToY methodName)
{
yHandler += methodName;
}
据我所知,要向此委托注册,我需要提供 respondToY 类型的内容。然而,当调用 subscribe 方法时,我可以提供委托的新实例或仅提供方法的名称。这是否意味着可以使用与委托签名匹配的任何方法并将自动转换为正确的委托类型?
** 编辑 **
因此,在这种假设下,仅向按钮的单击事件处理程序等提供方法名称也是有效的(假设该方法采用发送者和相关事件对象),它将转换为所需的委托?
这是一个方法组转换。它将方法组(基本上是方法或重载方法的名称)转换为具有兼容签名的委托类型的实例。
是的,可以使用任何兼容的方法。请注意,您也可以提供目标 - 例如:
string text = "Hello there";
Func<int, int, string> func = text.Substring;
Console.WriteLine(func(2, 3)); // Prints "llo", which is text.Substring(2, 3)
There must但涉及特定的委托类型。你不能只使用:
Delegate x = methodName;
...编译器不知道要创建哪种委托。
有关更多信息,请参阅 C# 4 语言规范的第 6.6 节。
注意方法组转换always创建相关委托的新实例 - 它不会被缓存(并且不能在不违反规范的情况下缓存。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)