目录
前言
委托的本质:理解1-将函数作为参数进行传递;理解2-是一种特殊的类型。
使用步骤:1.声明委托;2.设置目标方法;3,调用委托。
一、Delegate
1.语法
(1)委托声明:修饰符+返回类型+委托名称+参数名。
[access modifier] delegate [return type] [delegate name]([parameters])
(2)设置目标方法
2.示例
//(1)声明委托
public delegate void MyDelegate(string msg);
//(2)设定目标方法
MyDelegate de1 = new MyDelegate(ClassA.MethodA);
//(2)设定目标方法-简写
MyDelegate de1 = ClassA.MethodA;
//(3)目标方法调用
de1.Invoke("Hello World");
//(3)目标方法调用-简写
de1("Hello World");
class ClassA
{
public static void MethodA(string message)
{
Console.WriteLine("ClassA with parameter: " + message);
}
}
3.委托传参
static void InvokeDelegate(MyDelegate del) // MyDelegate类型参数
{
del("Hello World");
}
二、Action
1.无返回值的预定义委托
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);//泛型委托
Action<string, int> action = new Action<string, int>(ClassC.MethodC);
action("Hello World", 3);
class ClassC
{
public static void MethodC(string message,int num)
{
Console.WriteLine("ClassC with parameter: " + message+ num);
}
}
三、Func
1.有返回值的预定义委托
public delegate <T3,T4>Action<in T1, in T2>(T1 arg1, T2 arg2);//泛型委托
Func<string, int, string> func = new Func<string, int, string>(ClassD.MethodD);
string result= func("Hello World", 4);
class ClassD
{
public static string MethodD(string message, int num)
{
Console.WriteLine("ClassD with parameter: " + message + num);
return message + num.ToString();
}
}