Unity中用到的C#补充(六)- Delegate委托
2015-11-16 21:13
375 查看
1.委托
引用的类型,它指向程序中另一个以后会被调用的方法(或多个方法)。通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法,即委托可以调用它所指的方法。2.委托的使用
名称 | 格式 |
---|---|
定义委托类型: | delegate+关键字 返回类型 委托名(形参); |
声明委托对象: | 委托名 委托实例名; |
创建委托对象: | 委托实例名=new 委托名(某个类的方法); |
使用委托调用方法: | 委托实例名(实参) |
3.示例
简单示例using System; namespace ConsoleApplication1 { class Program { delegate void myDelegat();// 定义 static void Main(string[] args) { myDelegat de = new myDelegat(Hello);// 声明+实例 de(); // 使用 Console.ReadKey(); } static void Hello() { Console.WriteLine("Hello Delegate!"); } } }
委托链
包含try catch
using System; namespace ConsoleApplication1 { class Program { delegate void myDelegat(string str);// 定义 static void Main(string[] args) { myDelegat de1 = new myDelegat(Test1.Hello1);// 声明+实例 参数类型必须与定义中统一 myDelegat de2 = new myDelegat(Test2.Hello2); myDelegat de3 = new myDelegat(Hello3); string str = "委托链"; Console.WriteLine("委托1 :"); de1(str); Console.WriteLine(""); Console.WriteLine("委托2 :"); de2(str); Console.WriteLine(""); Console.WriteLine("委托1 + 委托2 :"); myDelegat de = de1 + de2; de(str); Console.WriteLine(""); Console.WriteLine("委托1 + 委托2 + 委托3:"); de += de3; de(str); Console.WriteLine(""); Console.WriteLine("委托2 + 委托3 :"); de -= de1; de(str); Console.WriteLine(""); Console.WriteLine("委托3 :"); de -= de2; de(str); Console.WriteLine(""); Console.WriteLine("当试图调用null委托时,会引发异常"); try { de -= de3; de(str); } catch (NullReferenceException e) { Console.WriteLine(e.Message); } Console.WriteLine(""); Console.WriteLine("从null中移出委托是无效操作"); try { de -= de3; de(str); } catch (NullReferenceException e) { Console.WriteLine(e.Message); } Console.WriteLine(""); Console.ReadKey(); } static void Hello3(string str) { Console.WriteLine(str + "Hello 3!"); } } class Test1 { public static void Hello1(string str) { Console.WriteLine(str + "Hello 1!"); } } class Test2 { public static void Hello2(string str) { Console.WriteLine(str + "Hello 2!"); } } }
运行结果:
相关文章推荐
- Unity中C# 文件本地读取,本地保存等实例
- Unity中的Time和Time.timeScale对协程的yield的影响
- Unity Android 加密 so
- Unity3D笔记2
- Unity与Android接口互相调用
- Unity 编辑模式下快速移动其它gameObject到当前gameObject位置处
- Unity Json
- 再详细的介绍一下Unity5的AssetBundle
- Unity5的AssetBundle的一点使用心得
- Unity3D研究院编辑器之创建Lua脚本模板(十六)
- Unity3D Editor 编辑器简易教程
- UnityTestTool实用解释
- Unity5 发送广播与消息的探索
- Vector方法magnitude
- unity 使用xcode5.1 launching iOS project via Xcode5 failed
- Unity3d官方单元测试插件学习
- Spine导入Unity
- Unity3D教程宝典之两步实现超实用的XML存档
- Unity3D教程:换装方法
- Unity5 关于修改组件GameObject的Color与mainTexture的探索