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!");
        }
    }
}
原文地址:https://www.cnblogs.com/han-guang-xue/p/10538851.html