【问题标题】:Two ways of defining a delegate [duplicate]定义委托的两种方法[重复]
【发布时间】:2012-02-02 19:42:51
【问题描述】:

可能重复:
very simple delegate musing

我一直想知道这种定义委托的方法有什么区别

System.Action act;
act = MethodWithoutParameters;

还有这个

System.Action act;
act = new System.Action(MethodWithoutParameters);

。我应该更喜欢一个吗?如果是这样,为什么? 不幸的是,我无法找到有关我的问题的很多信息。 如果有人能告诉我这两段代码之间的区别,我将不胜感激。

【问题讨论】:

    标签: c# .net delegates definition


    【解决方案1】:

    这两段代码产生完全相同的 IL。没有理由偏爱其中之一。这只是风格问题。

    【讨论】:

      【解决方案2】:

      它是语法糖:一种“隐式方法组转换”。编译器将第一个版本转换为第二个版本。

      【讨论】:

        【解决方案3】:

        完全一样,没有区别

        我还要添加第三个​​,lambda!:

        System.Action act = x=>DoSomething(x);
        

        【讨论】:

        • 那个略有不同。它引入了一个 lambda 表达式,使委托指向一个方法,该方法又调用 DoSomething 方法。有几个(诚然晦涩的)案例在功能上有所不同。
        • @ChrisShain:如果这可能不同,那么在像delegate 一样声明的普通函数中声明相同的lambda 应该 会导致相同的模糊结果。不是吗?
        • 我不确定我明白你在问什么
        • 我的意思是,如果我将 this lambda 概念放入函数中,为什么这个示例与之前介绍的示例不同。例如,act = MethodWithoutParametersMethodWithoutParameters 我有一个 lambda 调用 x=>DoSomething(s); ?
        • 传递参数没有区别,如果这就是你的意思的话。
        猜你喜欢
        • 2023-03-06
        • 2011-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        • 2016-09-08
        相关资源
        最近更新 更多