加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Func代理不链式方法

发布时间:2020-12-15 06:49:26 所属栏目:百科 来源:网络整理
导读:让我们想象简单的委托电话: void Main(){ Funcint,int,string tfunc = null; tfunc += Add; // bind first method tfunc += Sub; // bind second method Console.WriteLine(tfunc(2,2));}private string Add(int a,int b){ return "Add: " + (a + b).ToStri
让我们想象简单的委托电话:
void Main()
{
    Func<int,int,string> tfunc = null;
    tfunc += Add; // bind first method
    tfunc += Sub; // bind second method 

    Console.WriteLine(tfunc(2,2));
}

private string Add(int a,int b)
{
    return "Add: " + (a + b).ToString();
}

private string Sub(int a,int b)
{
    return "Sub: " + (a - b).ToString();
}

这个程序的结果是:

Sub: 0

那么为什么没有调用Add方法?我期待调用方法添加,然后方法Sub.

解决方法

添加被正确链接和调用,看看结果
void Main()
{
    Func<int,int b)
{
    Console.WriteLine("Inside Add");
    return "Add: " + (a + b).ToString();
}

private string Sub(int a,int b)
{
    Console.WriteLine("Inside Sub");
    return "Sub: " + (a - b).ToString();
}

它是:

Inside Add
Inside Sub
Sub: 0

什么不链接,因为没有办法访问它,是Add方法的结果.在链接的情况下返回值的代表返回调用的最后一个方法的值,即添加到委托中的最后一个方法.

这在C# 4.0 language specification的第15.4部分中有所规定

Invocation of a delegate instance whose invocation list contains multiple entries proceeds by invoking each of the methods in the invocation list,synchronously,in order. … If the delegate invocation includes output parameters or a return value,their final value will come from the invocation of the last delegate in the list.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读