使用委托来处理接口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()函数。有人能帮忙吗?我一无所知:(

使用委托来处理接口C#中的事件

以下是引发事件的代码:

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();