Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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
C# 编写委托而不弄乱代码_C#_Delegates - Fatal编程技术网

C# 编写委托而不弄乱代码

C# 编写委托而不弄乱代码,c#,delegates,C#,Delegates,我这样写代表 delegate void MyMethod(string arg1, string arg2); MyMethod mm; 我不知道为什么需要两行来声明一个委托。如果我的类有20个委托,我需要编写40行代码。 谁能告诉我用一行代码写这个的方法吗? 提前感谢。您在这里声明了两件截然不同的事情: 第一行声明了一个名为MyMethod 第二行声明了该委托类型的字段 理解差异很重要,因为这样您就可以确定何时确实要声明新的委托类型,何时只需声明现有委托类型的字段。如果您的类有

我这样写代表

  delegate void MyMethod(string arg1, string arg2);
  MyMethod mm;
我不知道为什么需要两行来声明一个委托。如果我的类有20个委托,我需要编写40行代码。 谁能告诉我用一行代码写这个的方法吗?
提前感谢。

您在这里声明了两件截然不同的事情:

  • 第一行声明了一个名为
    MyMethod
  • 第二行声明了该委托类型的字段
理解差异很重要,因为这样您就可以确定何时确实要声明新的委托类型,何时只需声明现有委托类型的字段。如果您的类有20个委托字段,您几乎肯定不想为每个字段声明新类型。如果他们有相同的签名,你可以使用单一类型。。。或者更好,只需使用一种框架类型,如
Action
Func

动作mm;

(对于
void
返回类型,有
Action
委托,对于非
void
返回类型,有
Func
委托,具有不同数量的参数,所有这些参数都以通用方式表示。有关更多详细信息,请查看MSDN。)

您在这里声明了两个非常不同的内容:

  • 第一行声明了一个名为
    MyMethod
  • 第二行声明了该委托类型的字段
理解差异很重要,因为这样您就可以确定何时确实要声明新的委托类型,何时只需声明现有委托类型的字段。如果您的类有20个委托字段,您几乎肯定不想为每个字段声明新类型。如果他们有相同的签名,你可以使用单一类型。。。或者更好,只需使用一种框架类型,如
Action
Func

动作mm;

(对于
void
返回类型,有
Action
委托;对于非
void
返回类型,有
Func
委托,具有不同数量的参数,所有这些参数都以通用方式表示。有关详细信息,请查看MSDN。)

如果使用.NET Framework 3.5或更高版本,则可以使用和委托,而不是每次声明新的委托类型。Func和委托之间是否存在性能差异?此-,应该会有所帮助。如果使用.NET Framework 3.5或更高版本,则可以使用和委托,而不是每次声明新的委托类型。Func和委托之间是否存在性能差异?此-,应该有帮助。那么元组之类的类型呢?有人告诉我,它们通常只在原型制作时使用,但在投入生产之前应该包装在一个类中。委托和函数之间有什么性能差异吗?@YesudassMoses Func是委托
Func
定义为
delegate T2 Func(T1 t)
@BjarkeSøgaard:我不确定元组在这里的位置。。。它们不是委托类型。那么元组之类的类型呢?有人告诉我,它们通常只在原型制作时使用,但在投入生产之前应该包装在一个类中。委托和函数之间有什么性能差异吗?@YesudassMoses Func是委托
Func
定义为
delegate T2 Func(T1 t)
@BjarkeSøgaard:我不确定元组在这里的位置。。。它们不是委托类型。
Action<string, string> mm;