如何在 C# 中使用事件?
How to use events in c#?
我对 c# 中的事件完全陌生,这就是我想做的事情:
我有两个方法:
OpenPage1();
OpenPage2();
当调用这些方法中的任何一个时,我想要调用名为 PerformSomeTask()
的第三个方法。
我相信这可以通过事件处理来完成。谁能告诉我怎么做?
事件是 C# 的重要组成部分。
为简单起见,您首先需要一个描述被调用方法类型的委托。在您的示例中, PerformSomeTask 是无效的并且不带任何参数。
所以在你的 class
中声明
public delegate void PerformSomeTask();
然后,您需要声明事件,这是将调用以启动您的函数的成员
public event PerformSomeTask OnPerformSomeTask;
在您的两种方法中,OpenPage1 和 OpenPage2,您需要检查是否有人订阅了您的活动,如果是,请调用它。
if(OnPerformSomeTask != null)
OnPerformSomeTask();
这将启动订阅您的活动的每个方法。订阅者可以是多个。
要订阅,就这样:
YourClass.OnPerformSomeTask += MyVoidMethod;
[...]
public void MyVoidMethod() { DoSomething(); [...] }
每次 运行 OpenPage1 和 OpenPage2
时都会调用您的 void 方法
如果您需要一些参数,只需更改您的委托即可继续。
public delegate void PerformSomeTask(string myParam);
然后,您的方法会将此参数作为标准函数参数(使用您的值调用您的事件,将其作为参数传递给每个订阅者函数)。
您在 class 中所要做的就是添加一个具有正确事件处理程序的事件(在您的示例中为 Action)。 eventHandler 应该对应于将订阅此事件的方法。
然后从 openPage 方法触发事件。
如果没有人订阅此事件,您必须检查是否为空。
public class Foo
{
public event Action theEvent;
public void OpenPage1()
{
if (theEvent != null)
theEvent();
}
public void OpenPage2()
{
if (theEvent != null)
theEvent();
}
}
public class Bar
{
public int Counter { get; set; }
public void PerformSomeTask()
{
Counter++;
}
}
这里有一个测试,您可以 运行 一起查看:
[TestMethod]
public void TestMethod1()
{
var foo = new Foo();
var bar = new Bar();
foo.theEvent += bar.PerformSomeTask;
foo.OpenPage1();
foo.OpenPage2();
Assert.AreEqual(2, bar.Counter);
}
我对 c# 中的事件完全陌生,这就是我想做的事情:
我有两个方法:
OpenPage1();
OpenPage2();
当调用这些方法中的任何一个时,我想要调用名为 PerformSomeTask()
的第三个方法。
我相信这可以通过事件处理来完成。谁能告诉我怎么做?
事件是 C# 的重要组成部分。
为简单起见,您首先需要一个描述被调用方法类型的委托。在您的示例中, PerformSomeTask 是无效的并且不带任何参数。 所以在你的 class
中声明public delegate void PerformSomeTask();
然后,您需要声明事件,这是将调用以启动您的函数的成员
public event PerformSomeTask OnPerformSomeTask;
在您的两种方法中,OpenPage1 和 OpenPage2,您需要检查是否有人订阅了您的活动,如果是,请调用它。
if(OnPerformSomeTask != null)
OnPerformSomeTask();
这将启动订阅您的活动的每个方法。订阅者可以是多个。
要订阅,就这样:
YourClass.OnPerformSomeTask += MyVoidMethod;
[...]
public void MyVoidMethod() { DoSomething(); [...] }
每次 运行 OpenPage1 和 OpenPage2
时都会调用您的 void 方法如果您需要一些参数,只需更改您的委托即可继续。
public delegate void PerformSomeTask(string myParam);
然后,您的方法会将此参数作为标准函数参数(使用您的值调用您的事件,将其作为参数传递给每个订阅者函数)。
您在 class 中所要做的就是添加一个具有正确事件处理程序的事件(在您的示例中为 Action)。 eventHandler 应该对应于将订阅此事件的方法。 然后从 openPage 方法触发事件。 如果没有人订阅此事件,您必须检查是否为空。
public class Foo
{
public event Action theEvent;
public void OpenPage1()
{
if (theEvent != null)
theEvent();
}
public void OpenPage2()
{
if (theEvent != null)
theEvent();
}
}
public class Bar
{
public int Counter { get; set; }
public void PerformSomeTask()
{
Counter++;
}
}
这里有一个测试,您可以 运行 一起查看:
[TestMethod]
public void TestMethod1()
{
var foo = new Foo();
var bar = new Bar();
foo.theEvent += bar.PerformSomeTask;
foo.OpenPage1();
foo.OpenPage2();
Assert.AreEqual(2, bar.Counter);
}