gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:27:41 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

事件只不过是对委托(delegate)的包装。他们添加了一个公共(public)的添加和删除函数,同时将支持变量变为私有(private)。而且我不知道在同一个委托(delegate)变量中“混合”委托(delegate)的方法。

另外,即使您可以这样做,您将如何明智地提出这些事件?作为此类的编写者,您有责任引发这些事件并填写所有这些参数。理想情况下使用 protected RaiseEvent() 函数。

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

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

关于具有多个函数重载的 c# 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57350472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com