你可以用'委托'做什么但不能用'动作'或'Func'做什么?

bar*_*nos 1 c# delegates

新手提出的问题提前道歉(因为我是C#中的一员):

在研究代表时,在我看来,关键字的整个"功能" 的组合ActionFunc覆盖delegate.

换句话说,您无法对delegate关键字执行任何操作,但无法使用Action或关键字Func.

我尝试过以下示例(工作正常):

Func<int,int,int,int> func = (x,y,z) => (x<<9)|(y<<6)|(z<<3);
Action<int,int,int> action = (x,y,z) => Console.WriteLine(x|y|z);
Run Code Online (Sandbox Code Playgroud)

我错了吗?如果是,那么请您提供一个反例吗?

Ser*_*rvy 6

您将需要使用委托以外Action或者Func如果你想有:

  1. 超过16个参数到您的方法.

  2. 任何参数refout参数.

  3. 一个params参数.

  4. 任何参数的可选参数.

  5. 对任何泛型参数的约束.(确保参数是扩展类型的任何类型,它具有无参数构造函数,它是值/引用类型等)

  6. unsafe 方法签名中使用的类型,例如指针作为参数.

  7. 有一个不是逆变的参数,或者一个协变的返回类型. Func并且Action两者都尽可能地应用差异,所以如果你的代表不是变体很重要,你需要自己的.