using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
//普通委托
delegate void weituo();
//带参数的委托
delegate void weituo1(string str);
//带参数带返回值的委托
delegate bool weituo2(string str);
//带两个参数带返回值的委托
delegate bool weituo3(string str,string strr);
//自定义泛型委托
delegate fan my<fan>(fan f);
//一个普通函数
public static void W()
{
Console.WriteLine("1.最初的委托,传入函数");
}
static void Main(string[] args)
{
//1.原版委托
weituo w = new weituo(W);
w();
//2.匿名方法
weituo n = delegate() { Console.WriteLine("2.匿名方法,不需要传入函数"); };
n();
//3.兰姆达表达式
weituo l = () => { Console.WriteLine("3.兰姆达表达式,更便捷"); };
l();
//4.兰姆达 Lambda 带参数 参数名字比较自由 无需和上面定义的str相同
weituo1 l1 = s => Console.WriteLine(s);
l1("4.带参数的兰姆达");
//5.兰姆达 Lambda 带参数 带返回值
weituo2 l2 = s => s.Length == 0; //简便写法 直接返回 只能写一行
//weituo2 l2 = (s) => s.Length == 0; //传递参数可以带小括号 不带也可以
//weituo2 l2 = (s) => { return s.Length == 0; }; //可以写多行 不带小括号也可以
Console.WriteLine("5."+l2(""));
//6.带两个参数
weituo3 l3 = (s, s1) => s.Equals(s1);
//weituo3 l3 = s,s1 => s.Equals(s1); //带两个参数不加小括号报错
Console.WriteLine("6." + l3("","asd"));
//7.泛型委托 func 必须有返回值 action必须无返回值 Predicate默认返回值为bool
Func<int, int> f = s => s;
Predicate<int> p = s => s > 0;
Action<bool> a = b => Console.WriteLine("7."+b);
a(p(f(1)));
//8.自定义泛型委托
my<int> m = x => x;
Console.WriteLine("8."+m(8));
//以下省略一万个字
}
}
}
c#委托的简单学习
最新推荐文章于 2024-04-23 14:27:47 发布