|
public class MyDelegateTest
{
// 步骤1,声明delegate对象
public delegate void MyDelegate(string name);
// 这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型
public static void MyDelegateFunc(string name)
{
Console.WriteLine("Hello, {0}", name);
}
public static voidMain ()
{
// 步骤2,创建delegate对象
MyDelegate md = new MyDelegate(MyDelegateTest.MyDelegateFunc);
// 步骤3,调用delegate
md("sam1111");
}
}
|
|
{
public delegate void SomeHandler(object sender, System.EventArgs e);
/**
public Control()
{
//这里使用的delegate必须与事件中声名的一致
}
public void RaiseSomeEvent()
{
EventArgs e = new EventArgs();
Console.Write("Please input 'a':");
string s = Console.ReadLine();
//在用户输入一个小a的情况下触发事件,否则不触发
{
SomeEvent(this, e);
}
}
//事件的触发者自己对事件进行处理,这个方法的参数必须和代理中声名的一致
{
Console.WriteLine("hello");
}
}
private void ProcessSomeEvent(object sender, EventArgs e) if (s == "a") this.SomeEvent += new SomeHandler(this.ProcessSomeEvent); //this.SomeEvent += new System.EventHandler(this.Control_SomeEvent); public event SomeHandler SomeEvent; //public event System.EventHandler SomeEvent; */ * 如果需要在事件的参数中使用自己定义的类型,也要自己定义delegate * 可以采用系统提供的System.EventHandler, 这里为了说明情况使用了自己定义的delegatepublic class Control///</summary>/// 事件的触发者///<summary> |
|
{
private Control ctrl = new Control();
public Container()
{
//这里使用的delegate必须与事件中声名的一致
ctrl.SomeEvent += new Control.SomeHandler(this.ResponseSomeEvent);
ctrl.RaiseSomeEvent();
}
public static void Main()
{
Container pane = new Container();
//这个readline是暂停程序用的,否则画面会一闪而过什么也看不见
Console.ReadLine();
}
//这是事件的接受者对事件的响应
{
Console.WriteLine("Some event occur!");
}
}
private void ResponseSomeEvent(object sender, EventArgs e) //ctrl.SomeEvent += new EventHandler(this.OnSomeEvent);class Container///</summary>/// 事件的接收和处理者///<summary> |
6715



被折叠的 条评论
为什么被折叠?



