zoukankan      html  css  js  c++  java
  • C#笔记(十九)——委托和事件

    课堂练习
    using System;
    using System.Collections.Generic;
     
    namespace Lesson13_3
    {
     
                     //张三:初版按钮的实现
                     /*class Button
                    {
                                    
                                    public string BtnName { get; set;}
     
                                    public Button(string btnName){
                                                    BtnName = btnName;
                                    }
     
                                    public void Onclick(){
                                                    Console.WriteLine (BtnName+ ":被点击了");
                                                    if (BtnName == "登录") {
                                                                    LoginPageLogic logic = new LoginPageLogic ();
                                                                    logic.Login ();
                                                    } else if (BtnName == "取消") {
                                                                    LoginPageLogic logic = new LoginPageLogic ();
                                                                    logic.CancelLogin ();
                                                    }
                                    }
     
                                    public void Onclick(Hero h){
                                                    if (BtnName == "a1") {
                                                                    h.LeftAction ();
                                                    }
                                    }
                    }*/
                     //张三:委托版按钮的实现
                     class Button
                    {
                                     //定义一个按钮委托
                                     public delegate void OnclickHandler ();
                                     //定义一个委托变量,用来存放点击操作的具体方法
                                     public OnclickHandler oncliAction;
     
                                     public void AddOnclickAction(OnclickHandler param){
                                                    oncliAction = param;
                                    }
     
                                     public string BtnName { get; set;}
     
                                     public Button(string btnName){
                                                    BtnName = btnName;
                                    }
     
                                     //按钮点击的时候调用的方法
                                     public void Onclick(Action< string> callBack){
                                                     Console.WriteLine (BtnName+ ":被点击了" );
     
                                                     if (oncliAction != null ) {
                                                                     //执行委托
                                                                    oncliAction ();
                                                    }
     
                                                     if (callBack != null ) {
                                                                    callBack (BtnName);
                                                    }
                                    }
                    }
     
                     //李四:登录页面逻辑
                     class LoginPageLogic {
                                     public void Login(){
                                                     Console.WriteLine ("登录成功" );
                                    }
     
                                     public void CancelLogin(){
                                                     Console.WriteLine ("取消登录" );
                                    }
                    }
     
                     //王二: 英雄类
                     class Hero
                    {
                                     public string HeroName{ get; set;}
     
                                     public void LeftAction(){
                                                     Console.WriteLine (HeroName+" 正在犀利的向左走位" );
                                    }
     
                                     public void RightAction(){
                                                     Console.WriteLine (HeroName+" 正在犀利的向右走位" );
                                    }
                    }
     
                     class PrintTool {
                                     //定义一个判断字符串是否相等的方法委托
                                     public delegate bool StringIsEquals( string str1,string str2);
     
                                     public static void PrintIntArr( int[] arr){
                                                     foreach (int item in arr) {
                                                                     Console.WriteLine (item);
                                                    }
                                    }
                                     //判断两个字符串是否相等的方法
                                     public bool ArrayisEquals(string str1, string str2){
                                                     /*if (str1 == str2) {
                                                                    return true;
                                                    } else
                                                                    return false;*/
                                                     return str1 == str2;
                                    }
                    }
     
                     class MainClass
                    {
                                     public static void Main ( string[] args)
                                    {
                                                     //委托的定义格式:
                                                     //访问修饰符  delegate 返回值类型 委托名称 (参数列表)
                                                     //访问修饰符           返回值类型 方法名称 (参数列表)
     
                                                     //委托的用法:
                                                     //1、声明委托
                                                     VoidFunction action;
                                                     //2、绑定委托
                                                     //   1.直接赋值
                                                     //action = EngGreeting;
                                                     //   2.通过new关键字来初始化绑定
                                                    action = new VoidFunction (EngGreeting);
                                                     //3、调用(和方法的调用类似)
                                                     //action ("张三");
                                                     //4、多播委托,可以将多个方法通过+=运算符绑定到一个委托上
                                                     //   调用委托的时候,会将委托上绑定的方法分别执行
                                                    action += ChineseGreeting;
                                                    action ("李四" );
     
                                                     //1、绑定实例对象的方法
                                                     /*PrintTool print = new PrintTool ();
                                                    //声明委托
                                                    Print printArr = new Print (print.PrintIntArr);
                                                    int[] result = new int[6]{ 1,2,3,4,5,6};
                                                    printArr (result);*/
     
                                                     //2、
                                                     int[] arr = new int[5]{ 1,2,3,4,5};
                                                     Print printArr = new Print ( PrintTool.PrintIntArr);
                                                    printArr (arr);
     
                                                     PrintTool tool = new PrintTool ();
                                                     PrintTool.StringIsEquals isEquals = new PrintTool. StringIsEquals (tool.ArrayisEquals);
                                                     bool result = isEquals ("a" ,"a");
                                                     Console.WriteLine (result);
     
                                                     List<int > arrlist = new List< int> ();
                                                    arrlist.Add (2);
                                                    arrlist.Add (1);
                                                    arrlist.Add (5);
                                                    arrlist.Add (3);
                                                    arrlist.Sort ();
                                                     foreach (var item in arrlist) {
                                                                     Console.WriteLine (item);
                                                    }
                                                     Console.Clear ();
     
                                                     //合并委托: 如果委托有返回值,那么返回值就是最后绑定的方法的返回值
                                                     Addelegate del = Add;
                                                    del += Mul;
                                                     int result1 = del (2,3);
                                                     Console.WriteLine (result1);
     
                                                     //解除绑定:注意委托不能为null
                                                    del -= Mul;
                                                    del -= Mul;
                                                     //del -= Add;
                                                     Console.WriteLine (del(2,3));
     
                                                     //登录,取消页面逻辑
                                                     LoginPageLogic page = new LoginPageLogic ();
     
                                                     //登录按钮
                                                     Button loginBtn = new Button ( "登录");
                                                     //为登录按钮绑定登录逻辑
                                                    loginBtn.AddOnclickAction (page.Login);
                                                    loginBtn.Onclick (delegate(string message){
                                                                     Console.WriteLine (message);
                                                    });
     
                                                     //为取消按钮绑定取消登录的逻辑
                                                     Button cancelBtn = new Button ( "取消");
                                                    cancelBtn.oncliAction = page.CancelLogin;
                                                    cancelBtn.Onclick (null);
     
     
                                                     Hero dema = new Hero ();
                                                    dema.HeroName = "德玛西亚" ;
                                                     //向左操作按钮
                                                     Button leftBtn = new Button ( "a1");
                                                    leftBtn.oncliAction = dema.LeftAction;
                                                    leftBtn.Onclick (null);
                                                     //s向左操作按钮
                                                     Button rightBtn = new Button ( "d1");
                                                    rightBtn.oncliAction = dema.RightAction;
     
                                                     //匿名方法1、无返回值的匿名方法:delegate(参数列表){ 方法体 }2、有返回值的匿名方法:delegate(int x,int y){return x+y}3、在将匿名方法赋值给委托的时候,末尾的 ; 不能忘
                                                     Addelegate delAdd = delegate (int x, int y) {
                                                                     return x + y;
                                                    };
     
                                                     //2、lambda表达式:
                                                    delAdd = (int x,int y) => {
                                                                     return x*y;
                                                    };
                                                     Console.WriteLine (delAdd (4,5));
     
                                                     //Func:范型委托
                                                     Func<int ,int ,string, float> chu = (int x,int y,string name) => {
                                                                     Console.WriteLine (name);
                                                                     return x+y;
                                                    };
     
                                                     Console.WriteLine (chu(3,5,"张三" ));
                                    }
     
                                     //定义打印数组的委托
     
                                     public delegate int Addelegate( int x,int y);
     
                                     public delegate void Print(int[] arr);
                                     public delegate void VoidFunction( string _n);
     
                                     public static   void ChineseGreeting( string name){
                                                     Console.WriteLine ("早上好:" +name);
                                    }
     
                                     public static void EngGreeting( string name){
                                                     Console.WriteLine ("good morning:" +name);
                                    }
     
                                     public static int Add( int x,int y){
                                                     return x + y;
                                    }
     
                                     public static int Mul( int x,int y){
                                                     return x * y;
                                    }
                    }
    }
    //================================================================
    using System;
     
    namespace Lesson13_2
    {
     
                     public class Person{
                                     public string name;
     
                                     public void Congratulate(){
                                                     Console.WriteLine (this .name+" 祝贺新郎新娘百年好合~!" );
                                    }
                    }
     
                     public class Button{
                                     public string btnName;
                                     //事件的
                                     public delegate void OnclickHandler();
                                     public event OnclickHandler ClickEvent;
     
                                     public void AddClickListener(OnclickHandler clickCall){
                                                    ClickEvent += new OnclickHandler (clickCall);
                                    }
     
                                     public void Onclick(){
                                                     if (ClickEvent != null ) {
                                                                    ClickEvent ();
                                                    }
                                    }
                    }
     
                     public class CJBoy{
     
                                     public delegate void MarryHandle();
                                     //事件的发起者
                                     public event MarryHandle marryEvent;
                                    
                                     public void SayLove(string qs){
                                                     Console.WriteLine ("黑负泪" );
                                    }
     
                                     public void XYQ(){
                                                     Console.WriteLine ("送玫瑰" );
                                    }
     
                                     public void Song(){
                                                     Console.WriteLine ("你笑的多甜蜜蜜蜜" );
                                    }
     
                                     public bool Ask(string name){
                                                     Console.WriteLine ("你到底接不接受" );
                                                     return true ;
                                    }
     
                                     public long PhoneNum(){
                                                     return 133010556;
                                    }
     
                                     public void SendMessage(Action callback){
                                                     if (callback != null ) {
                                                                    callback ();
                                                    }
                                    }
     
                                     //给事件添加一个监听
                                     public void AddMarryListener(MarryHandle listener){
                                                    marryEvent += new MarryHandle (listener);
                                    }
     
                                     public void Marry(){
                                                     Console.WriteLine ("要结婚了" );
                                                     //事件触发
                                                     if (marryEvent != null ) {
                                                                    marryEvent ();
                                                    }
                                    }
                    }
                     //delegate bool AskHandle();
                     //delegate bool AskHandle(string name);
     
     
     
                     class MainClass
                    {
                                     public static void Main ( string[] args)
                                    {
                                                     CJBoy boy = new CJBoy ();
     
                                                     //Func:用于创建有返回值类型的委托,
                                                     //注意,返回值一定义是最后那个参数
                                                     Func<string ,bool> laowang
                                                                    = new Func <string, bool> (boy.Ask);
                                                     bool result = laowang ("超级男孩" );
                                                     Console.WriteLine (result);
     
                                                     Func<long > laowang2 = new Func< long> (boy.PhoneNum);
                                                     Console.WriteLine (laowang2 ());
     
                                                     //Action: 用于创建没有返回值类型的委托
                                                     Action<string > laowang3
                                                    = new Action <string> (boy.SayLove);
                                                    laowang3 ("流浪" );
     
                                                     Action laowang4 = new Action (boy.Song);
                                                    laowang4 ();
     
                                                    boy.SendMessage (delegate(){
                                                                     Console.WriteLine ("吃饭了吗~!" );
                                                    });
     
                                                     Person plaowang = new Person();
                                                    plaowang.name = "老王" ;
                                                     Person p2 = new Person();
                                                    p2.name = "老张" ;
                                                     Person p3 = new Person();
                                                    p3.name = "老李" ;
     
                                                    boy.AddMarryListener (plaowang.Congratulate);
                                                    boy.AddMarryListener (p2.Congratulate);
                                                    boy.AddMarryListener (p3.Congratulate);
     
                                                     //结婚当天
                                                    boy.Marry ();
     
                                                     //
                                                     Button loginBtn = new Button ();
                                                    loginBtn.AddClickListener (delegate(){
                                                                     Console.WriteLine ("登陆" );
                                                    });
     
                                                     Button cancelBtn = new Button ();
                                                    cancelBtn.AddClickListener (delegate(){
                                                                     Console.WriteLine ("取消登陆" );
                                                    });
     
                                                     Button skill1Btn = new Button ();
                                                    skill1Btn.AddClickListener (delegate(){
                                                                     Console.WriteLine ("大招" );
                                                    });
     
                                                    loginBtn.Onclick ();
     
                                                    cancelBtn.Onclick ();
     
                                                    skill1Btn.Onclick ();
                                    }
                    }
    }
     
  • 相关阅读:
    看看优酷是怎么做网络投票的?
    CURL的学习和应用
    PHP生成word的三种方式
    感谢
    网站后台权限设计
    ORACLE 11g 导出数据
    第一份blog
    查看tomcat的内存情况
    执行sshadd时出现Could not open a connection to your authentication agent
    读取SSDT当前函数地址
  • 原文地址:https://www.cnblogs.com/ningyongbin/p/5922265.html
Copyright © 2011-2022 走看看