我想在我的方法中使用事件本身。可能吗? “PlayWithEvent”方法可以使用“EventSource.Test”事件作为参数吗?
public class EventSource
{
public event EventHandler Test;
}
class Program
{
static void Main(string[] args)
{
EventSource src = new EventSource ();
PlayWithEvent (src.Test);
}
static void PlayWithEvent (EventHandler e)
{
e (null, null);
}
}
我想要一个类似的语法:
class Program
{
static void Main(string[] args)
{
EventSource src = new EventSource ();
PlayWithEvent (src.Test);
}
static void PlayWithEvent (event e)
{
e += something;
}
}
答案 0 :(得分:2)
您的代码无法编译 - 您只能在与事件相同的类中访问该事件的EventHandler
委托,即使这样,它也会null
,除非您实际添加了一个事件处理程序来调用。
答案 1 :(得分:2)
由于您已标记
,因此目前无效public event EventHandler Test;
作为一个事件。
删除事件代码,然后重试。它现在适合我。原因是C#对事件的限制......但是在你的代码中,你想要的只是一个委托。将您的班级声明为:
public class EventSource
{
public EventHandler Test;
}
请注意,我删除了活动:
public EventHandler Test;
答案 2 :(得分:1)
你不能这样做。你需要通过实际的课程。
public class EventSource
{
public event EventHandler Test;
public void TriggerEvent()
{
Test(this, EventArgs.Empty);
}
}
class Program
{
static void Main(string[] args)
{
EventSource src = new EventSource ();
PlayWithEvent (src);
}
static void PlayWithEvent (EventSource e)
{
src.TriggerEvent();
}
}
您可以通过引入界面以更通用的方式执行此操作:
public interface IEventPublisher<T> where T : EventArgs
{
public void Publish(T args);
}
public class EventSource : IEventPublisher<EventArgs>
{
public event EventHandler Test;
public void Publish(EventArgs args)
{
Test(this, args);
}
}
class Program
{
static void Main(string[] args)
{
EventSource src = new EventSource ();
PlayWithEvent (src);
}
static void PlayWithEvent (IEventPublisher<EventArgs> publisher)
{
publisher.Publish(EventArgs.Empty);
}
}
答案 3 :(得分:0)
只有定义了事件的类才能引发事件。如果您需要其他类来操作它,则必须使用常规委托。
但请注意,由于Test
在EventSource
范围内使用(而不是外部可访问的事件)时,EventSource
解析为基础委托,{{1}} 可以< / em>将其作为参数传递给外部方法。