有时我无法理解最简单的事情,我确信这是在我的脸上,我只是没有看到它。 我试图在这个简单的类中为方法创建一个委托:
public static class BalloonTip
{
public static BalloonType BalType
{
get;
set;
}
public static void ShowBalloon(string message, BalloonType bType)
{
// notify user
}
}
现在,这个动作<>应该创建委托而不实际使用关键字“委托”声明一个委托,我是否理解正确?然后:
private void NotifyUser(string message, BalloonTip.BalloonType ballType)
{
Action<string, BalloonTip.BalloonType> act;
act((message, ballType) => BalloonTip.ShowBalloon(message, ballType));
}
无法编译。为什么?
(顺便说一句,我需要这个委托而不是直接调用ShowBalloon()的原因是,调用必须来自另一个线程而不是UI,所以我想我需要Action&lt;&gt;)< / p>
谢谢,
答案 0 :(得分:10)
您需要首先将您的匿名方法分配给Action
变量,然后使用传入方法的参数调用它:
private void NotifyUser(string message, BalloonTip.BalloonType ballType)
{
Action<string, BalloonTip.BalloonType> act =
(m, b) => BalloonTip.ShowBalloon(m, b);
act(message, ballType);
}
在这种情况下,由于Action
变量所期望的参数与封装方法的参数相同,因此您也可以直接引用该方法:
private void NotifyUser(string message, BalloonTip.BalloonType ballType)
{
Action<string, BalloonTip.BalloonType> act = BalloonTip.ShowBalloon;
act(message, ballType);
}
答案 1 :(得分:2)
你不应该分配给act
变量吗?有些东西:
Action<string, BalloonTip.BalloonType> act = BalloonTip.ShowBalloon;
您不仅没有为act
分配方法,因为您似乎正在尝试调用将匿名方法作为参数传递给它的行为,同时它接收字符串和BalloonTip.BalloonType。
最后,您应该返回act
,因此您获取通知方法委托的方法应该是:
public Action<string, BalloonTip.BalloonType> GetNotificationMethod() {
Action<string, BalloonTip.BalloonType> act = BalloonTip.ShowBalloon;
return act;
}
你也可以简化:
public Action<string, BalloonTip.BalloonType> GetNotificationMethod() {
return BalloonTip.ShowBalloon;
}
希望我理解你的问题。祝你好运。