using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Day_8
{
    //像方法一样定义委托
    delegate void DL(int i);
    class Program
    {
        static void Main(string[] args)
        {
            Program pro = new Program();
            DL dl1 = new DL(pro.FF);//将方法分配给委托 委托将与方法有相同的作用
            DL dl2 = pro.FF1;//与  DL dl1=new DL(pro.FF1)相同;
            DL dl3 = delegate(int i) { Console.WriteLine("匿名"); Console.WriteLine(i); };//匿名方法

            //委托方法的调用可以像其他任何方法一样,具有参数和返回值。
            //与委托的签名(由返回类型和参数组成)匹配的任何可访问类或结构中的任何方法都可以分配给该委托
            dl1(100);
            DY(dl1);
            MYclass mc = new MYclass();
            mc.Method(dl1);
            Console.WriteLine("--------------------------");
            //委托可以链接在一起
            DL dl4 = dl1 + dl2+dl3 ;  
            dl4 += DD ;
            dl4 += pro.DD1;
            dl4(13);//dl1(13)+dl2(13)+dl3(13)+DD(13)+DD1(13)
          
        }
        static void DD(int k)//方法可以是静态方法
        {
            Console.WriteLine("DD 静态");
            Console.WriteLine(k);
        }
        void DD1(int j)//也可以是实例方法
        {
            Console.WriteLine("DD1 ");
            Console.WriteLine(j);
        }
        static void DY(DL dl)//将方法作为参数进行传递
        {
            dl(200);
        }
        public void FF(int i)
        {
            Console.WriteLine("FF");
            Console.WriteLine(i);
        }
        public void FF1(int i)
        {
            Console.WriteLine("FF1");
            Console.WriteLine(i);
        }
    }

    class MYclass
    {
        public void Method(DL dl)
        {
            dl(300);
        }
    }
}