具有多个函数重载的 c# 事件

c# event with multiple function overloads

我正在尝试制作一些可以订阅的事件,但我想提供使用不同类型的空隙的选项。请参阅以下说明:

public event Action<float, float> MouseMove;
public event Action<Vector2> MouseMove;
public event Action MouseMove;

发送事件

MouseMove(MouseX, MouseY);
MouseMove(new Vector2(MouseX, MouseY));
MouseMove();

所以现在threory用户可以通过以下方式订阅:

c.MouseMove += DoWithMouseMove;

现在这个用户可以根据自己的需要创建以下类型的功能:

static void DoWithMouseMove(float x, float y)
{
    Console.WriteLine(x +"  "+ y);
}

或使用以下模式:

static void DoWithMouseMove()
{
    Console.WriteLine("Mouse is moving");
}

但这不可能,因为我收到以下错误:

already contains a definition for 'MouseMove'.
On the class that contains the events

我该怎么做,或者这不可能吗?

如果有什么不清楚或需要进一步说明,请告诉我,以便我编辑问题!

据我所知,这是不可能的。

事件只不过是对委托的包装。他们添加了一个 public 添加和删除函数,同时将支持变量变为 Private。 而且我不知道在同一个委托变量中 "mix" 委托的方法。

另外,即使你能做到,你会如何明智地提出这些事件?作为此 class 的作者,您有责任引发这些事件并填写所有这些参数。理想情况下使用受保护的 RaiseEvent() 函数。

你为什么认为你需要这个也很奇怪。在您的示例中,您可能会实施第一个选项。不关心值 (public event Action MouseMove;) 的事件用户不会检索这些值。需要矢量 (public event Action<Vector2> MouseMove;) 的用户可以根据这些值自己构建一个。

编辑:我还认为您应该遵循已建立的事件模式:(对象发送者,customEventArgsInstance e)。不要随意将参数扔到签名中,这会使处理您的事件变得困难。