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

时间:2013-08-15 20:58:15

标签: c# events interface delegates

我正在尝试将MTA98-731作为C#初学者学习。我无法找出以下问题的解决方案,任何人都可以帮助我吗?感谢;

想象一下,您正在编写用于在程序中创建和处理事件的代码。 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()函数。有人可以帮忙吗?我很无能:(

2 个答案:

答案 0 :(得分:2)

以下是举起活动的代码:

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

答案 1 :(得分:0)

我认为您需要致电s.Invoke()

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

var ev = SampleEvent;
if (ev != null) ev();