博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
事件 和 委托
阅读量:4610 次
发布时间:2019-06-09

本文共 5930 字,大约阅读时间需要 19 分钟。

收集的代码 事件和委托

委托会在后面赋值的时候被覆盖,事件赋值一个执行一个,一下收集的测试代码

----------------系统委托EventHandler

----------------------------事件(封装)
    public event SearchHandler search;
    public event SearchHandler Search {
        add {
            search += value;
        }
        remove {
            search -= value;
        }
    }

--------------------------------------------------------------------简单的委托例子

 

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace T2 {     //委托必须是参数类型和返回类型相同,并且用deletegate修饰    class Computer     {         public int Add(int x, int z) {             return x + z;         }         public int Sub(int x, int z)         {             return x - z;         }         //属性委托        public delegate int ComputerHander(int x, int z);         public ComputerHander ch=null;     }     //类委托    public delegate int ComputerHander(int x, int z); } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace T2 {     class Program     {         static void Main(string[] args)         {             //Computer的例子            Computer c = new Computer();             //调用类委托            ComputerHander hander = c.Add;             Console.WriteLine(hander(1,2));             //调用属性委托            c.ch = c.Sub;             Console.WriteLine(c.ch(1, 2));         }     } }
View Code

 

--------------------------------------------------------------用方法做参数的委托

 

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace T2 {     //定义一个业务逻辑类    class HelloManager     {         //把委托作为方法的参数        public void SayHello(string name, HelloHander hander) {             hander(name);         }     }     //定义中国人类    class Chinaes     {         public static void ChinesHello(string name) {             Console.WriteLine("ChinesHello," + name);         }     }     //定义英国人类    class English     {         public static void EnglishHello(string name)         {             Console.WriteLine("EnglishHello," + name);         }     }     //定义委托    public delegate void HelloHander(string name); } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace T2 {     class Program     {         static void Main(string[] args)         {             //调用HelloManager的例子            HelloManager h = new HelloManager();             h.SayHello("哈哈",English.EnglishHello);         }     } }
View Code

------------------------------------------------------------------自定义事件

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace T2 {   //自定义注册事件    //猫是事件原,所以事件类型要在猫类里面定义    class Cat     {         //定义委托        public delegate void CryHander();         //定义事件,委托类型        public event CryHander CryEvent;         public void Cry() {             Console.WriteLine("猫大叫一声...");             if (CryEvent != null) {                 CryEvent();//执行事件            }         }     }     //老鼠    class Mouse {         public void Run() {             Console.WriteLine("老鼠逃跑了....");         }     }     //主人    class Master {         public void Weak() {             Console.WriteLine("主人醒了....");         }     } }using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace T2 {     class Program     {         static void Main(string[] args)         {             //动态注册事件            Cat cat = new Cat();             Mouse mouse = new Mouse();             Master master = new Master();             //订阅事件,多播性            cat.CryEvent += new Cat.CryHander(mouse.Run);             cat.CryEvent += new Cat.CryHander(master.Weak);             //触发事件            cat.Cry();         }     } }
View Code

--------------------------------------带参数的事件

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace T2 {     //事件类型    public class QuestionEvenArgs : EventArgs     {         public string QuestionMes{
get; set; } } //委托 public delegate void QuestionHander(object sendr,QuestionEvenArgs e); //主持人类 public class Host { public event QuestionHander AnswerQuestion; public string Name { get; set; } public string Question { get; set; }//问题 //触发事件方法 public void Start() { Console.WriteLine("大家好,我是:" + Name); Console.WriteLine("今天的问题是:" + Question); Console.WriteLine("请各位嘉宾开始回答"); //通知所有嘉宾回答问题 if (AnswerQuestion != null) { AnswerQuestion(this, new QuestionEvenArgs { QuestionMes = Question }); } } } //嘉宾抽象类--父类 public abstract class Guest { public string Name { get; set; } public abstract void Answer(object sendr, QuestionEvenArgs e); } public class GuestA : Guest { public override void Answer(object sendr, QuestionEvenArgs e) { Console.WriteLine(Name + ",这个问题是我考虑一下!"); } } public class GuestB : Guest { public override void Answer(object sendr, QuestionEvenArgs e) { Console.WriteLine(Name + ",这个问题我知道!"); } } public class GuestC : Guest { public override void Answer(object sendr, QuestionEvenArgs e) { Host h = sendr as Host; Console.WriteLine(h.Name+",这个问题是"+e.QuestionMes+",我知道答案,但是我不告诉你"); } } public class Test { public static void Main(string[] args) { Host h = new Host { Name = "李咏", Question = "伦敦奥运什么时候开始?" }; GuestA a = new GuestA { Name = "AAA" }; GuestB b = new GuestB { Name = "BBB" }; GuestC c = new GuestC { Name = "CCC" }; h.AnswerQuestion += new QuestionHander(a.Answer); h.AnswerQuestion += new QuestionHander(b.Answer); h.AnswerQuestion += new QuestionHander(c.Answer); h.Start(); } } }
View Code

 

转载于:https://www.cnblogs.com/love201314/p/5151953.html

你可能感兴趣的文章
JS案例之8——从一个数组中随机取数
查看>>
C#中Dictionary小记
查看>>
mysql日期类型默认值'0000-00-00'容错处理
查看>>
openni和骨架追踪 rviz查看---34
查看>>
防止网站被iframe调用
查看>>
B - 畅通工程(并查集)
查看>>
linux使用rz、sz快速上传、下载文件
查看>>
判断数字的正则表达式
查看>>
DOC常用命令(转)
查看>>
php写一个判断是否有cookie的脚本
查看>>
Mac配置Fiddler抓包工具
查看>>
转:Java并发集合
查看>>
Word截图PNG,并压缩图片大小
查看>>
Python项目对接CAS方案
查看>>
mysql产生随机数
查看>>
编程风格
查看>>
熟悉常用的Linux命令
查看>>
易之 - 我是个大师(2014年3月6日)
查看>>
Delphi中窗体的事件
查看>>
file_get_contents()获取https出现这个错误Unable to find the wrapper “https” – did
查看>>