首页 > 编程语言 >C#中的委托delegate和Lambda表达式

C#中的委托delegate和Lambda表达式

时间:2022-10-26 00:55:35浏览次数:45  
标签:AD 委托 C# int Add delegate 返回值 string Lambda

委托:委托别人去帮我完成某件事情。
自定义委托

AddDelegate AD = new AddDelegate(Add); //获取需要委托的方法详细,参数返回值和定义委托参数返回值都必须一样。
string str = AD.Invoke(5, 2); //执行委托:Invoke或者不写,可以直接使用 AD(5,2) 
Console.WriteLine(str); //Add方法委托AddDelegate对象帮忙执行,实际上运行的是Add方法内容。

string Add(int a,int b) { return $"两个参数有返回值的普通方法:{a + b}"; }

delegate string AddDelegate(int a, int b);//定义委托delegate

泛型委托

AddDelegate<string> AD = A.Add; //简写不需要new,给方法就可以
string str = AD("1", "3"); //调用委托简写,不需要Invoke方法。
Console.WriteLine(str); 

class A
{
    public static string Add(string a, string b) { return $"两个参数有返回值的普通方法:{a + b}"; }
    public static string Add(int a, int b) { return a + b +""; }
}

delegate string AddDelegate<T>(T a, T b);//泛型委托,返回值不能定义泛型,只能定义参数

“协变:out”->”和谐的变”->”很自然的变化”->string->object 小到大
“逆变:in”->”逆常的变”->”不正常的变化”->object->string  大转小
直白的说:out: 输出(作为返回值结果),in:输入(作为参数)

delegate M AddDelegate<in T, in T1,out M>(T a, T1 b);//out协变,输出做返回值,in逆变,输入做参数,默认in可以不写

系统委托(系统定义好的两个):Action无返回值委托---Func有返回值委托。最后一个参数是返回值,两个委托最多参数只有16种重载

Action<int> a = A.Add;//Action无返回值委托,最多16个参数,无参不写<>
a(22);//参数22

Func<int, int ,string> AD = A.Add;//Func有返回值委托,最多16个参数+最后一个是返回值 = 17个参数
string str = AD(1, 3); //返回值是最后一个参数string
Console.WriteLine(str); 

class A
{
    public static void Add(int a) { Console.WriteLine("Action有参无返回值委托"); }
    public static string Add(int a, int b) { return $"Func有参数有返回值委托的普通方法:{a + b}"; }
}

匿名方法的委托

Action<string> AD = new Action<string>(delegate(string str) 
{
    Console.WriteLine(str);
});
AD("这是一个匿名方法的委托");

Lambda表达式:本质也是一个匿名方法

Action<string> AD = new Action<string>(str => Console.WriteLine(str));
AD("一个参数单个语句的简写,lambda表达式");
Action AD = new Action(() => Console.WriteLine("无参无返回值委托"));
AD();
Func<string> AD = () => "无参有返回值委托";
AD();
Func<int,int,string> AD = (int i ,int a) => 
{
    Console.WriteLine("如果是一个参数,可以不需要括号,不需要数据类型。");
    return $"有参有返回值的委托:{i + a}";
};
Console.WriteLine(AD(5, 2));

 

标签:AD,委托,C#,int,Add,delegate,返回值,string,Lambda
From: https://www.cnblogs.com/longxinyv/p/16826694.html

相关文章