1

我正在尝试以 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() 函数。有人可以帮忙吗?我一无所知:(

4

2 回答 2

3

这是引发事件的代码:

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);
于 2013-08-15T21:02:07.767 回答
0

我想你需要打电话s.Invoke()

然后在 Invoke 方法中你需要调用事件:

var ev = SampleEvent;
if (ev != null) ev();
于 2013-08-15T21:02:15.110 回答