我正在尝试将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()函数。有人可以帮忙吗?我很无能:(
答案 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();