C#委托

来源:互联网 发布:热力图软件 编辑:程序博客网 时间:2024/05/17 09:07

委托:

委托定义了方法的类型,使得方法可以作为另一个方法的参数来进行传递,这样可以在程序中避免使用大量的判断语句,同时使程序具有更好的扩展性。

可以将多个方法绑定到同一个委托变量上,当调用该委托变量时,所有绑定到该委托变量上的方法将会被依次调用。

 

例:

public delegate void DelegateModel(string name);//定义委托

    public class Delegate
    {
        public DelegateModel DM;//声明委托变量

        public void Function(string name, DelegateModel dm)
        {
            dm(name);
        }
    }

    class Program
    {
        public static void Fun1(string name)
        {
            Console.WriteLine("Fun1:"+name);
        }

        public static void Fun2(string name)
        {
            Console.WriteLine("Fun2:" + name);
        }

        static void Main(string[] args)
        {
            Delegate A = new Delegate();
            Console.WriteLine("多个方法绑定到同一个委托上。");
            A.DM = Fun1;
            A.DM += Fun2;
            A.Function("C#",A.DM);
            Console.WriteLine("解除委托绑定。");
            A.DM -= Fun1;
            A.Function("C#", A.DM);
            Console.ReadKey();
           
        }
    }

 

 

结果:

多个方法绑定到同一个委托上。

Fun1:C#

Fun2:C#

解除委托绑定。

Fun2:C#

委托注意事项:

1,委托隐含具有sealed属性,不能用来派生新的类型。

2,,委托的最大的作用就是为类的事件绑定事件处理程序。

3,在调用委托前要判断委托是否为NULL,不为空才能调用。

 

改进:

 public delegate void DelegateModel(string name);//定义委托

    public class Delegate
    {
        public DelegateModel DM;//声明委托变量

        public void Function(string name)
        {
            if (DM != null)//是否有方法绑定到该委托上
            {
                DM(name);
            }
        }
    }

    class Program
    {
        public static void Fun1(string name)
        {
            Console.WriteLine("Fun1:"+name);
        }

        public static void Fun2(string name)
        {
            Console.WriteLine("Fun2:" + name);
        }

        static void Main(string[] args)
        {
            Delegate A = new Delegate();
            Console.WriteLine("多个方法绑定到同一个委托上。");
            A.DM = Fun1;
            A.DM += Fun2;
            A.Function("C#");
            Console.WriteLine("解除委托绑定。");
            A.DM -= Fun1;
            A.Function("C#");
            Console.ReadKey();
           
        }
    }