【问题标题】:Best way to pass delegate parameters传递委托参数的最佳方式
【发布时间】:2013-09-28 21:19:06
【问题描述】:

将参数传递给委托的最佳方式是什么?我可以看到以下两种方式的好处,因此我想知道最常用和行业接受的方式:


1) 单独传递任何参数,每个参数就是一个参数。

示例委托

public delegate void MyDelegate(bool PARAM1, String PARAM2, int PARAM3);



2) 通过结构传递任何参数,委托的唯一参数就是该结构。

示例结构

public struct MyDelegateArgs
{
    public bool PARAM1;
    public String PARAM2;
    public int PARAM3;
}

示例委托

public delegate void MyDelegate(MyDelegateArgs args);

【问题讨论】:

  • 您认为第一种方法的好处是什么?
  • 我看到主要好处是代码更少,但我也可以看到将代码放在其他地方(在单独文件中的结构中)的好处。
  • 使用参数结构的唯一好处是如果您要传递许多参数或另一个具有相同参数的委托。
  • 如果参数超过四个或五个,则使用第二种方法。

标签: c# delegates


【解决方案1】:

假设您的结构有 20 个属性/字段 - 您真的想将所有这些作为参数传递吗?一般来说,我会主张隐藏所有这些复杂性,并通过传入一个类/结构来保留你的代码DRY - 在大多数情况下,这也更具表现力 - 你的代表需要一个 MyDelegateArgs 类型的参数。

对于传入单个值,我能想到的唯一论点是,如果您只需要一个恰好在 MyDelegateArgs 中使用但在其他方面不相关的小子集。

【讨论】:

    【解决方案2】:

    如果您的委托具有 Action<T>Predicate<T> 的实用程序,则最好使用 struct 参数,因为它可以防止您在签名变得对于预定义的 Action 或 @987654324 而言太大的情况下绊倒@定义当你去扩展委托的签名时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2013-11-17
      相关资源
      最近更新 更多