有没有理由在C#中使用带有void返回的函数?

时间:2015-05-06 17:16:54

标签: c# function delegates action

除了传统,我还有什么理由想要使用

void foo(int k) {
    // stuff
}

Action<int> foo = new Action 
    ((k) => { 
        // stuff
    });

更一般地说,正常定义我的函数是否有任何实际优势,而不是将它们定义为委托?

1 个答案:

答案 0 :(得分:2)

当然,有很多充分的理由。想到的前三个:

几乎所有的C#程序员都会对你非常罕见的代表过度使用感到非常惊讶。

函数可以是<ul id="sortable"> <li class="ui-state-default"> <img src="http://localhost/site/gallery/3.png" style="max-width: 100%; height: auto;"> <input type="hidden" class="imageHiddenImageId" id="imageHiddenImageId" name="imageHiddenImageId" value="45"> <input type="hidden" id="imageHiddenNo" name="imageHiddenNo" value="2"> </li> </ul> ,可以用来实现接口。

可以重新分配变量,甚至是委托类型的变量,这会导致非常意外的行为。

但还有更多。

Eric Lippert在评论中提到函数可以重载,变量不能。

方法可以实现为迭代器(使用virtual关键字),匿名函数不能。

可以隐式调用某些特殊方法:yield查找名为new T { a, b, c }的方法,而不是名为Add的变量。

预定义的委托类型不允许您使用Addref参数。

预定义的委托类型不允许您向返回类型或参数添加属性。