【问题标题】:Best way to add overload methods to all methods in a C# file向 C# 文件中的所有方法添加重载方法的最佳方法
【发布时间】:2017-09-11 09:36:29
【问题描述】:

我对元编程非常陌生,尤其是在 C# 中,因此我正在寻找有关如何实现以下目标的良好指示。我们从这些方法开始:

public JObject x(int a)
public JObject y(int b)

现在,我需要为这个文件中的所有方法添加一个可选参数,同时保持向后兼容性。因此,为了满足最后一个要求,我需要为每个这样的方法创建新方法:

public JObject x(int a)
public JObject y(int b)
public JObject x(int a, int o = defaultValue)
public JObject y(int b, int o = defaultValue)

现在,问题是我有 50 多种这样的方法,我想尽可能避免复制粘贴。我对元编程没有太多经验,所以我的问题是:

  • 围绕 Visual Studio / ReSharper 的工具有什么方法可以帮助我实现这一目标?
  • 我是否应该编写一些脚本来解析我的文件并为我做这件事? (那里有推荐的资源吗?)
  • 或者我应该只是享受复制粘贴的乐趣:(?

提前致谢!

【问题讨论】:

  • 您是否将这些添加到现有类中 - 即继承下来添加这些?
  • @Enigmativity 是的,不是继承,只是在同一个类中添加
  • 如果您有方法x(int a),那么添加x(int a, int o = defaultValue) 就是bad idea(这很混乱,并且可能会在调试时花费一些时间)。 更改现有方法以支持可选参数或添加新方法没有默认值:x(int a, int o).
  • 如果您要添加新参数作为可选参数,为什么需要保留旧签名?
  • @AlekseyL。向后兼容性要求。检查here

标签: c# visual-studio metaprogramming


【解决方案1】:

脚本可能是我能想到的最佳选择。

虽然这个问题本身给我带来了代码的味道。我觉得可选参数本身很烦人,因为它们往往会导致充满 if else 的大而复杂的方法。同样使用可选参数意味着您可以将它们添加到现有的方法调用中来保持向后兼容性。

我认为应该考虑一个更大的设计问题,即需要添加 50 多个带有可选参数的重载。

【讨论】:

  • 我认为这个答案是正确的,但强调这个问题太宽泛,无法给出具体答案。
  • 同意。我正在修改以删除可选参数并仅添加重载方法。感谢您指出了这一点。但是对于您提出的向后兼容性点,请查看this
【解决方案2】:

Visual Studio 搜索和替换支持 RegEx 搜索,您可以在替换中使用匹配项,所以这可能是要走的路。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    相关资源
    最近更新 更多