我正在处理一个关于委托和事件的问题。我是这方面的新手。我不知道怎么称呼这个事件。
有人会告诉我吗? 提前谢谢。
答案 0 :(得分:1)
可以在声明它的类中调用该事件。首先,您通常要检查您的事件是否为空。
if (MyEvent != null) MyEvent(this, new EventArgs());
您传递给事件的参数将取决于事件的声明。为了给你一点背景,一个事件只是一个编译技巧。当事件如
public event ChangedEventHandler Changed;
编译它看起来像
protected ChangedEventHandler _change;
public ChangedEventHandler Change
{
add { _change += value; }
remove { _change -= value; }
}
所以声明它的地方都会使用_change
,而外面的任何内容都会使用Change
。换句话说,在声明它的地方,它只是一个委托,所有正常的规则都适用。
答案 1 :(得分:1)
以下是调用事件的简单示例....
// event_keyword.cs
using System;
public delegate void MyDelegate(); // delegate declaration
public interface I
{
event MyDelegate MyEvent;
void FireAway();
}
public class MyClass: I
{
public event MyDelegate MyEvent;
public void FireAway()
{
if (MyEvent != null)
MyEvent();
}
}
public class MainClass
{
static private void f()
{
Console.WriteLine("This is called when the event fires.");
}
static public void Main ()
{
I i = new MyClass();
i.MyEvent += new MyDelegate(f);
i.FireAway();
}
}
Link可能有帮助。
答案 2 :(得分:0)
要重复使用该事件,您只需将事件附加到您的控件,例如。
buttonone.Click+= event1;
buttonTwo.Click+= event1;
有关详细信息,请查看:C# Event Implementation Fundamentals, Best Practices and Conventions
答案 3 :(得分:0)
定义委托后,您需要定义何时调用该事件。我的意思是你可以在为特定变量分配任何值时调用事件。
这是定义具有相同变量类的委托的示例。
public class callbackdel : EventArgs
{
public readonly string resp = null;
public callbackdel(string s)
{
resp = s;
}
}
public delegate void WorkerEndHandler(object o, callbackdel e);
现在在您正在使用的控件中,您需要添加此方法。
public void OnWorkEnd(object o, callbackdel e)
{
WorkEnd(o, e);
}
创建方法并定义委托后,只需调用方法即可从任何委托中触发事件。
OnWorkEnd((object)this, e);
答案 4 :(得分:0)
使用活动时,您首先必须声明:
// Create some custom arguments for the event
public class SampleEventArgs
{
public SampleEventArgs(string s)
{
Text = s;
}
public String Text {get; private set;}
}
// Define a class that uses the event
public class EventPublisher
{
// Declare the delegate
public delegate void SampleEventHandler(object sender, SampleEventArgs e);
// Declare the event.
public event SampleEventHandler SampleEvent;
// Wrap the event in a protected virtual method
// to enable derived classes to raise the event.
protected virtual void RaiseSampleEvent()
{
// Raise the event by using the () operator.
if (SampleEvent != null)
SampleEvent(this, new SampleEventArgs("Hello"));
}
}
然后您可以订阅该活动:
EventPublisher publisher = new EventPublisher();
publisher.SampleEvent += new EventPublisher.SampleEventHandler(SampleEventHandler);
public void SampleEventHandler(object sender, SampleEventArgs args)
{
}
EventPublisher
执行RaiseSampleEvent()