• C#中的委托,个人理解


    相当于Java中的interface 定义的接口,但是  比Java中的interface要好

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    
    namespace ADONetDome
    {
    
        public delegate void UserC(int i);   
        //可以理解为java中的interface 接口,但是委托中不需要去实现,会自动找见相对应类的匹配的方法.又和重载相似,但是方法名不同
        public class UserA 
        {
            public UserC userC;    
    
            public UserA(){
                userC = null;
            }
            /// <summary>
            /// 去交电费,委托C去找个人给我交电话费
            /// </summary>
            public void PayTel(String name,int money){  
                Console.WriteLine("我是UserC:"+name+"托我去替他交电话费,交"+money+"");
                userC(money);
            }
            
    
        }
    
        public class UserB{
            
            public void goPayOther(int money)
            {
                Console.WriteLine("我是UserB:   发现有人让我去交话费,他给了我钱. 好!!!我去交" + money + "元,发现交给其他人了");
            }
            public void goPayTel(int money)
            {
                Console.WriteLine("我是UserB:   发现有人让我去交话费,他给了我钱. 好!!!我去交" + money + "");
            }
        }
    }

    调用

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    
    namespace ADONetDome
    {
        class Program
        {
            static void Main(string[] args)
            {
                UserA A = new UserA();  //有一个对象A人
                
                UserB B = new UserB();  //有一个对象B人
                //现在A想让B去交电话费,可是找不见这个人,但是B知道C对象,和他很熟,A和C也很熟  A中有C,不需要创建   然后让C调B中支付的方法
                A.userC = B.goPayTel;       //A 委托C 去调用C的支付方法,替我交话费    A对象中没有B 对象, C中也没有B对象  ,java中interface中就不一样了,必须需要去实现类实现其中的方法  
                Console.WriteLine("我是UserA,叫张三,我需要B给我交电话费,需要委托UserC给说一下,把钱给UsreC");
                A.PayTel("张三",400);
    
    
                Console.WriteLine("Hello World!");
            }
        }
    }
  • 相关阅读:
    Linux启动报错missing operating system
    Linux tmp目录自动清理总结
    ORACLE口令管理
    oom_kill_process造成数据库挂起并出现found dead shared server
    Oracle shutdown immediate遭遇ORA-24324 ORA-24323 ORA-01089
    从flink-example分析flink组件(1)WordCount batch实战及源码分析
    从mysql高可用架构看高可用架构设计
    由mysql分区想到的分表分库的方案
    六边形效果
    迷你MVVM框架 avalonjs1.5.2 发布
  • 原文地址:https://www.cnblogs.com/han-guang-xue/p/10538851.html
Copyright © 2020-2023  润新知