Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 是否有任何理由定义自定义委托?_.net_C# 4.0 - Fatal编程技术网

.net 是否有任何理由定义自定义委托?

.net 是否有任何理由定义自定义委托?,.net,c#-4.0,.net,C# 4.0,除了调用具有大量参数的方法(可能还支持.NET 3.5之前的代码)之外,定义自定义委托而不是仅使用Func和Action是否有任何理由?就功能而言,实际上并不是这样。就可读性而言,我唯一能想象的就是更加明确。考虑下面的例子: public delegate void MessageHandler(string msg); // user custom delegate public sub DoSomething(MessageHandler handler){} // use generi

除了调用具有大量参数的方法(可能还支持.NET 3.5之前的代码)之外,定义自定义委托而不是仅使用Func和Action是否有任何理由?

就功能而言,实际上并不是这样。就可读性而言,我唯一能想象的就是更加明确。考虑下面的例子:

public delegate void MessageHandler(string msg);

// user custom delegate
public sub DoSomething(MessageHandler handler){}

// use generic action
public sub DoSomething(Action<string> handler){}

就功能而言,不是真的。就可读性而言,我唯一能想象的就是更加明确。考虑下面的例子:

public delegate void MessageHandler(string msg);

// user custom delegate
public sub DoSomething(MessageHandler handler){}

// use generic action
public sub DoSomething(Action<string> handler){}
在现代C#代码中,您是对的,很少需要创建自定义委托。对于C#4,我只会创建一个自定义委托:

  • 当存在多个参数时,可提高可读性和自我文档编制
  • 如果委托的名称可以向API的用户传达含义
  • 也许对于一些P/Invoke操作,现在想不出任何方法
您倾向于在.NET代码库中看到一些自定义委托的原因是,它的大部分设计非常早,当时C#是版本1,没有匿名委托、lambda或泛型。因此,大多数需要委托类型的操作都需要自定义委托。

在现代C#代码中,您是对的,很少需要创建自定义委托。对于C#4,我只会创建一个自定义委托:

  • 当存在多个参数时,可提高可读性和自我文档编制
  • 如果委托的名称可以向API的用户传达含义
  • 也许对于一些P/Invoke操作,现在想不出任何方法

您倾向于在.NET代码库中看到一些自定义委托的原因是,它的大部分设计非常早,当时C#是版本1,没有匿名委托、lambda或泛型。因此,大多数需要委托类型的操作都需要自定义委托。

到目前为止没有提到的一个方面是
Func
Action
不支持
ref
out
参数。不过,学员可以使用它们。

到目前为止没有提到的一个方面是
Func
Action
不支持
ref
out
参数。当然,公共标识符应该有好的描述性名称。当然,公共标识符应该有好的描述性名称。