委托--------------------------------c#

1.先来一个简单的委托写法,为的是访问一个类中的私有成员。。。。稍微拓展一下,也可以变成回调方法的内部代码。

  class Program
    {
        static void Main(string[] args)
        {
            //调用委托,访问私有成员
            Methods m = new Methods();
            m.f("你好");
        }
    }

    //定义一个简单的委托类型
    public delegate bool Feedback(string s);

    class Methods
    {
        //初始化一个委托
        public Feedback f;
        public Methods()
        {
            //用委托包装改方法
            f = new Feedback(writepaper);
        }

        //这个方法是私有的
        private bool writepaper(string s)
        {
            Console.Write(s);
             return true;
        }

    }

 2.回调方法

 //定义一个简单的委托类型
    public delegate bool Feedback(string s);
    class Program
    {
        //这就是回调
        Feedback callback;
        static void Main(string[] args)
        {
            Program p = new Program();
            //定义回调的方法,调用的是method中的writepaper方法
            p.callback = new Feedback(Methods.writepaper);
            //这相当于系统的invoke
            p.involke(1,p.callback);
            Console.ReadKey();
        }

        //用这个名字定义方法,看起来更熟悉
        //它可以类比与系统的invoke方法
        public void involke(int i ,Feedback fb)
        {
            Console.WriteLine(i.ToString());
            fb((i+3).ToString());
        }
    }

    class Methods
    {  
        public static bool writepaper(string s)
        {
            Console.Write(s);
             return true;
        }

    }

 3.委托链

 //定义一个简单的委托类型
    public delegate bool Feedback();
    class Program
    {
    
        Feedback callback;
        static void Main(string[] args)
        {
            Feedback f1 = new Feedback(Methods.writepaper1);
            Feedback f2 = new Feedback(Methods.writepaper2);
            Feedback f3 = new Feedback(Methods.writepaper3);
            //委托链
            Feedback fbchain = null;
            //即使fbchain是null也没关系,也一样想委托链中添加委托
            fbchain = (Feedback)Delegate.Combine(fbchain,f1);
            fbchain = (Feedback)Delegate.Combine(fbchain, f2);
            fbchain = (Feedback)Delegate.Combine(fbchain, f3);
            //调用委托链,经测试,委托链中的委托是同步调用的,想要异步,就要自己去写方法了
            fbchain();

            //删除链中的一个委托
            fbchain = (Feedback)Delegate.Remove(fbchain, f3);
            fbchain();

        }

   
    }

    class Methods
    {  
        public static bool writepaper1()
        {
            Console.WriteLine("1");
            Console.ReadKey();
             return true;
        }

        public static bool writepaper2()
        {
            Console.WriteLine("2");
            Console.ReadKey();
            return true;
        }
        public static bool writepaper3()
        {
            Console.WriteLine("3");
            Console.ReadKey();
            return true;
        }
    }

4.Func。。。。。。泛型委托,

      //该委托的不论在<>中有几个类型,,最后一个类型必然是返回类型,前面所有的都是参数类型
          Func<bool, int> f = (n) => { n = false;return 1;  };

            Console.WriteLine(f(false));
            Console.ReadKey();
原文地址:https://www.cnblogs.com/xiaoleye/p/4928902.html