【发布时间】:2011-10-13 17:26:54
【问题描述】:
当我尝试编译以下内容时:
public static delegate void MoveDelegate (Actor sender, MoveDirection args);
我收到一个错误消息:“修饰符 'static' 对该项目无效。”
我在一个单例中实现这个,有一个单独的类调用委托。问题是,当我在另一个类中使用单例实例来调用委托时(从标识符,而不是类型),无论出于何种原因,我都不能这样做,即使我声明委托是非静态的。显然,只有当且仅当委托是静态的时,我才能通过类型直接引用它。
这背后的原因是什么?我正在使用 MonoDevelop 2.4.2。
更新
在尝试使用以下代码的建议之一后:
public void Move(MoveDirection moveDir)
{
ProcessMove(moveDir);
}
public void ProcessMove(MoveDirection moveDir)
{
Teleporter.MoveMethod mm = new Teleporter.MoveMethod(Move);
moveDelegate(this, moveDir);
}
我收到一个处理错误,指出 MoveMethod 必须是一个类型,而不是一个标识符。
【问题讨论】:
-
我认为一个小代码示例将帮助您解释问题。我将第二段读了五遍,但仍然不知道你想要完成什么以及如何完成。
-
ProcessMove方法中mm变量的作用是什么?如果某个委托(静态或实例)分配给moveDelegate,则调用moveDelegate将调用分配的委托,因为它应该这样做。 -
我认为接口更适合这个。请看my answer
标签: c# delegates compiler-errors