C# 委托和事件

今天刚好学习到unity中easytouch控件(呆会还要写一个文章),又碰到了委托和事件这个我不懂的概念,所以学习一下,这里主要通过实例的讲解,我会再查书去看相关知识。


委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在我看来委托就是C#的函数指针,首先先简要地介绍一下委托的基本知识:

委托的定义

委托的声明原型是:
delegate <函数返回类型><委托名>(<函数参数>)
举个例子,public delegate void CheckDelegate(int number);//定义了一个委托CheckDelegate,它可以了注册返回void类型且有一个int作为参数的函数。
这样就定义了一个委托,但是委托在.net内相当于声明了一个类,类如果不实例化为对象,很多功能是没有办法使用的,委托也是如此。

委托的实例化

委托实例化的原型是:
<委托类型><实例化名>=new <委托类型>(<注册函数>)
例子,CheckDelegate _checkDelegate=new CheckDelegate(checkMod);//用函数CheckMod实例化上面的CheckDelegate委托为_checkDelegate
在.net 2.0开始可以直接用匹配的函数实例化委托:
<委托类型><实例化名>=<注册函数>
例子:CheckDelegate _checkDelegate=CheckMod;//用函数CheckMod实例化上面的CheckDelegate委托为_checkDelegate
现在我们就可以像使用函数一样来使用委托了,在上面的例子中现在执行_checkDelegate()就等同于执行CheckMod(),最关键的是现在函数CheckMod相当于放在了变量之中,它可以传递给其他的CheckDelegate引用对象,而且可以作为函数参数传递到其他函数内,也可以作为函数的返回类型。

第一个例子:
public class DelegateTest  
{  
     // 声明delegate对象   
     public delegate void CompareDelegate(int a,int b);  
     // 欲传递的方法,它与CompareDelegate具有相同的参数和返回值类型   
     public static void Compare(int a,int b)  
     {  
         Console.WriteLine((a>b).ToString());  
     }  
   
     public static void Main()  
     {  
         // 创建delegate对象   
         CompareDelegate cd = new CompareDelegate(DelegateTest.Compare);  
         // 调用delegate   
         cd(1,2);  
     }  
}  

第二个例子:

public delegate void MyTestDelegate(int i);  
public class Program  
{  
    public static void Main()  
    {  
        //创建delegate  
        ReceiveDelegateArgsFunc(new MyTestDelegate(DelegateFunction));  
    }  
    //这个方法接收一个delegate类型的参数,也就是接收一个函数作为参数  
    public static void ReceiveDelegateArgsFunc(MyTestDelegate func)  
    {  
        func(21);  
    }  
    //欲传递的方法  
    public static void DelegateFunction(int i)  
    {  
        System.Console.WriteLine("传过来的参数为: {0}.", i);  
    }  
}  

委托事件在Easytouch脚本中的应用

委托:
#region Delegate
	public delegate void ButtonUpHandler(string buttonName);
	public delegate void ButtonPressHandler(string buttonName);
	public delegate void ButtonDownHandler(string buttonName);
	#endregion
事件:
#region Event
	/// <summary>
	/// Occurs when the button is down for the first time.
	/// </summary>
	public static event ButtonDownHandler On_ButtonDown;
	/// <summary>
	/// Occurs when the button is pressed.
	/// </summary>
	public static event ButtonPressHandler On_ButtonPress;
	/// <summary>
	/// Occurs when the button is up
	/// </summary>
	public static event ButtonUpHandler On_ButtonUp;
	#endregion
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值