版权声明: 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