C#--委托的使用

版权声明: https://blog.csdn.net/u013251413/article/details/89332600

什么是委托:委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义

namespace 委托的使用
{
    class Program
    {
        public delegate void Del(string txt);
        static void Main(string[] args)
        {
           InitMehode();
           System.Console.ReadKey();
        }
        public static void DelegateMethod(string txt) {
            System.Console.WriteLine(txt);
        }

        public static void InitMehode() {
            //声明委托对象,将DelegateMethod方法作为属性传递
            //说明:实例化委托是一个对象,所以可以将其作为参数进行传递,也可以将其赋值给属性。
            Del hander = DelegateMethod;
            hander("你好,佩奇");

            //调用委托方法中带有委托类型作为参数hander,也可以是当前方法体DelegateMethod
            MehodeCallback("张三", "北京", hander);

            //上面方法对象然后调用方式
            MethodClass mc = new MethodClass();
            Del del1 = mc.Method1;
            Del del2 = mc.Method2;

            //注意,此时Method3方法列表为:Method3(int age, string name)与上面定义委托对象参数不相符,如果想从新使用,需要定义新的委托对象列表。
            //Del del3 = mc.Method3;


            //按照顺序依次调用MethodClass的方法,如果委托使用引用参数,则引用将依次传递给三个方法中的每个方法。
            Del allMehode = del1 + del2;
            //如果任一方法引发了异常,而在该方法内未捕获该异常,则该异常将传递给委托的调用方,并且不再对调用列表中后面的方法进行调用。如果委托具有返回值和/或输出参数,它将返回最后调用的方法的返回值和参数。若要从调用列表中移除方法,请使用减法运算符或减法赋值运算符(“-”或“-=”)【增加或删除】
            
            allMehode("调用了对象所有方法委托");

        }
        //此时将委托对象作为参数传递,在调用的时候处理。
        public static void MehodeCallback(string txt1,string txt2,Del callback) {
            callback(txt1+txt2);
        }
    }
}

调用结果:

参考文章:http://shouce.jb51.net/net/index.html

猜你喜欢

转载自blog.csdn.net/u013251413/article/details/89332600