using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 委托和事件的介绍
{
class Program
{
public delegate void SayHello(string name); //定义一个委托
static event SayHello sayEvent; //事件 对上面的委托
SayHello进行包装 委托:=赋值 += 事件:+=
static void Main(string[] args)
{
sayEvent += SayHelloCha;
sayEvent += SayHelloEng;
sayEvent("事件");
/*
* 1.委托delegate
* 委托是一个类,它定义了方法的类型,使得可以将方法当做
另一个方法的参数来进行传递,
* 这种将方法动态地赋给参数的做法,可以避免在程序中大量
使用if else switch 语句
* 同时使得程序具有更好的可扩张性
*
* 使用委托可以将多个方法绑定到同一个委托变量,当调用此
变量时候,可以依次调用所有
* 绑定的方法
*
* 2,事件 event
* 事件其实没有什么不好理解的,声明一个事件不过是类似
于声明一个进行了封装的委托类型的变量而已
* 在委托的基础上进行了包装
*
* 作业:热水器 警报器 显示器
* 当温度到90的时候观察者的状态发生改变
*
*/
doSayHello("Tom", SayHelloEng);
Console.ReadKey();
}
/// <summary>
/// 打招呼
/// </summary>
static void SayHelloCha(string name)
{
Console.WriteLine(name + "早上好");
}
static void SayHelloEng(string name)
{
Console.WriteLine(name + "Hello");
}
static void doSayHello(string name, SayHello say) //say:相
当于一个方法,只关注返回值和参数
{
say(name);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
delegate void weituo();
static event weituo shijian ;//事件问题,定义了一个事件,把委托放进去
enum enu { Chinese,English};
static void Main(string[] args)
{
enu en=new enu();
Console.WriteLine("请输入密码的语言");
Console.WriteLine("A:Chinese");
Console.WriteLine("B:English");
string ss = Console.ReadLine();
if (ss == "A")
{
en = enu.Chinese;
}
else
{
en=enu.English;
}
switch (en)
{
case enu.Chinese:
weituo w=SayC;
shijian+=w;//事件添加函数的方法和多播委托一样
shijian();
break;
case enu.English:
weituo ww = new weituo(SayE);
shijian += ww;
shijian();
break;
}
Console.ReadKey();
}
static public void SayC()
{
Console.WriteLine("王尼玛,你好");
}
static public void SayE()
{
Console.WriteLine("王尼玛,hello");
}
}
}
事件
最新推荐文章于 2024-07-10 17:37:23 发布