使用委托来处理接口C#中的事件
本文关键字:事件 接口 处理 | 更新日期: 2023-09-27 18:27:47
作为一名C#初学者,我正在努力学习MTA98-731。我想不出下面这个问题的答案,有人能帮我吗?谢谢
想象一下,您正在编写用于在程序中创建和处理事件的代码。SampleClass类需要实现以下接口:
public delegate void SampleDelegate();
public interface ISampleEvents
{
event SampleDelegate SampleEvent;
void Invoke();
}
您需要为SampleClass和创建SampleClass实例并调用事件的测试方法编写代码。你应该写什么代码?
我写了以下内容:
public class SampleClass:ISampleEvents
{
public SampleClass()
{
SampleEvent = new SampleDelegate(Invoke);
}
//public event SampleDelegate SampleEvent ;
public void Invoke()
{
System.Console.WriteLine("Invoke");
}
public event SampleDelegate SampleEvent;
}
class Program
{
static void Main(string[] args)
{
SampleClass s = new SampleClass();
}
}
但它似乎没有调用invoke()函数。有人能帮忙吗?我一无所知:(
以下是引发事件的代码:
public class SampleClass : ISampleEvents
{
public event SampleDelegate SampleEvent; // declare event
public void Invoke()
{
if (SampleEvent != null) // check if handlers attached
SampleEvent(); // raise event (i.e. invoke event delegate)
}
}
在引发事件之前,不要忘记检查是否有现有的订阅者。示例类的用法:
class Program
{
static void Main(string[] args)
{
SampleClass s = new SampleClass(); // create instance of class with event
s.SampleEvent += SampleEventHandler; // subscribe to event
s.Invoke(); // invoke some logic which raises event
}
private static void SampleEventHandler()
{
Console.WriteLine("Invoked"); // handle event
}
}
当添加事件处理程序时,您可以只使用方法名
s.SampleEvent += SampleEventHandler;
哪个是创建新委托的语法糖:
s.SampleEvent += new SampleDelegate(SampleEventHandler);
我认为您需要调用s.Invoke()
然后在Invoke方法中,您需要调用事件:
var ev = SampleEvent;
if (ev != null) ev();