gpt4 book ai didi

c# - 如何创建在另一个类中触发的事件

转载 作者:行者123 更新时间:2023-11-30 20:48:07 25 4
gpt4 key购买 nike

在我的 PluginManager 代码中,事件 PluginEvent 在之后被触发添加了一个插件。但我想让事件也在测试类中触发。不知何故我无法解决这个问题。该事件仅在 PluginManager 类 中触发。我看了一些文章如何创建事件等等,但我更加困惑


PluginManager 类

public class PluginEventArgs
{
public PluginEventArgs(string s) { Text = s; }
public String Text { get; private set; } // readonly
}

public class PluginManager
{
// Declare the delegate (if using non-generic pattern).
public delegate void PluginEventHandler(object sender, PluginEventArgs e);

// Declare the event.
public event PluginEventHandler PluginEvent;

protected virtual void RaiseSampleEvent(string message)
{
if (PluginEvent != null)
PluginEvent(this, new PluginEventArgs(message));
}


public PluginManager()
{
PluginEvent += PluginManager_PluginEvent;
SomeMethod();
}

void PluginManager_PluginEvent(object sender, PluginEventArgs e)
{
//This event gets triggered =)
}

public void SomeMethod()
{
//Code
RaiseSampleEvent("Name of the Plugin");
//Code
}


}

我的测试类:

class test
{
public test()
{
PluginManager pluginMg = new PluginManager();

pluginMg.PluginEvent += pluginMg_PluginEvent;
}

//I want this event to get triggered when a new plugin has been found
void pluginMg_PluginEvent(object sender, PluginEventArgs e)
{
MessageBox.Show(e.Text);
}

}

如何设法让事件在测试类中触发?感谢您的任何建议!

最佳答案

除了一个逻辑错误外,您实际上做对了事情。

在您的测试类中,您将使用构造函数创建 PluginManager。 PluginManager 的构造函数首先订阅事件,然后引发它。

之后您将订阅该事件。

简单的问题是,当您引发事件时,您的测试类尚未订阅。当您再次引发该事件时,一切都会正常进行。

另一件事是我会使用通用的 EventHandler 类而不是创建您自己的委托(delegate)。这可以使您的代码更简洁,而且每个人乍一看都知道这是一个事件。

只需从 EventArgs 继承 PlugInEventArgs,然后使用 EventHandler。

关于c# - 如何创建在另一个类中触发的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25075302/

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