/*
委托示例。
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
public delegate void mydel(string name);
//委托调用,仅仅要求方法的参数类型和返回类型与委托的参数类型和返回类型相匹配。
class Program
{
static void Main(string[] args)
{
mydel d = new mydel(MyClass.A);
d("Jack");
Console.ReadKey();
}
}
public class MyClass
{
public static void A(string name)
{
Console.WriteLine("Hi," + name);
}
}
}
运行结果:
Hi,Jack
注意:
委托的使用步骤:
1、在类内定义方法;
2、在任何类的外部声明一个委托,委托的参数形式及返回类型一定要和委托的方法的参数形式和返回类型一致; [修饰符] delegate 返回类型 委托名(参数列表);
3、创建委托对象; 委托名 委托对象=new 委托名(关联方法名);
4、调用委托。
/*
委托多播。
一般通过“+”或“-”运算符实现多播的增加或减少。
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
delegate void Delegt(int x,int y);
class Program
{
static void Main(string[] args)
{
Delegt d = new Delegt(MyClass.Sum);
Test t = new Test();
d += new Delegt(t.Sub);
d(2, 3);
Console.ReadKey();
}
}
public class MyClass
{
public static void Sum(int a,int b)
{
Console.WriteLine(a+b);
}
}
public class Test
{
public void Sub(int a, int b)
{
Console.WriteLine(a - b);
}
}
}
运行结果:
5
-1
<pre name="code" class="csharp">/*
用事件处理机制实现当发生下雨事件时,足球赛、交通警察给出友情提示的事件处理。
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
public delegate void RainHandler(); //声明委托
class Sky
{
public event RainHandler Rain; //委托与事件绑定
public void OnRain() { Rain(); } //定义下雨时触发事件
}
class FootballPlay
{
public static void Cancel()
{
Console.WriteLine("启动取消比赛流程...");
}
}
class Police
{
public static void Notify()
{
Console.WriteLine("下雨天请谨慎驾驶...");
}
}
class Program
{
static void Main(string[] args)
{
Sky sky = new Sky();
sky.Rain += new RainHandler(FootballPlay.Cancel); //注册足球赛暂停
sky.Rain+=new RainHandler(Police.Notify); //注册警察提示
sky.OnRain(); //启动下雨
Console.ReadKey();
}
}
}
/*
事件过程:
* 1.定义事件处理方法;
* 2.创建或声明一个委托实例;
* 3.创建一个定义事件类;
* (1)与委托关联的事件;
* (2)定义事件的触发方法;
* 4.事件注册;
* 5.使用事件。
*/
运行结果:
启动取消比赛流程...
下雨天请谨慎驾驶...