C# 匿名函数 委托

一、匿名方法
要将代码块传递为委托参数 例如:
点击事件

button1.Click += delegate(System.Object o, System.EventArgs e)
{
    System.Console.WriteLine("Hello");
};
this.Loaded += delegate
{
    InitializeEvent();
};

加载事件

this.Loaded += (sl, el) =>
{
    System.Console.WriteLine("Hello");
    this.button1.Click += (sender, e) =>
    {
        System.Console.WriteLine("Wold!");
    }
}

匿名方法与线程

System.Threading.Thread thread = new System.Threading.Thread(delegate(j)
{
    System.Console.WriteLine("Hello");
});
thread.Start();

System.Threading.ThreadPool.QueueUserWorkItem((s) =>
{
    Action f = () =>
    {
        System.Console.WriteLine("Wold!");
    };
}

使委托与匿名方法关联

delegate void DEL(string s);
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    DEL p = delegate(string j)
    {
        System.Console.WriteLine(j);
    };
    p("Hello world");
}

二、Func,Func是有返回值的泛型委托
Func 表示无参,返回值为int的委托
Func<object,string,int> 表示传入参数为object, string 返回值为int的委托
Func<object,string,int> 表示传入参数为object, string 返回值为int的委托
Func<T1,T2,T3,int> 表示传入参数为T1,T2,T3(泛型)返回值为int的委托
Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void

匿名方法只能在使用委托的时候创建,事实上,它们通过delegate关键字创建。
使用示例:

var func = new Func<bool, int>(delegate(bool x) { return x ? 10 : 5; });
var func1=new Func<bool,int>((istrue)=>{istrue==true?1:0;});
int ret = func(true);

三、匿名事件

btn.Click += delegate(object o, EventArgs e) {  };

四、Lambda 表达式,Func委托
MSDN中写道:“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。
所有Lambda表达式都使用Lambda运算符=>
左边是输入参数列表
1.一个参数:param=>expr
2.多个参数:(param-list)=>expr

右边是表达式或语句块
(参数列表)=>表达式或语句块

合法的Lambda表达式
1、(x, y) => x * y //多参数,隐式类型=> 表达式
2、x => x * 5 //单参数, 隐式类型=>表达式
3、x => { return x * 5; } //单参数,隐式类型=>语句块
4、(int x) => x * 5 //单参数,显式类型=>表达式
5、(int x) => { return x * 5; } //单参数,显式类型=>语句块
6、() => Console.WriteLine() //无参数

在编写Lambda表达式时,可以忽略参数的类型,因为编译器能够根据上下文直接推断参数的类型,示例代码如下。
(x, y) => x + y //多参数,隐式类型=> 表达式

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值