0

我有以下类,在构造函数中有太多参数,我想重构该类以仅接收一个封装所有参数的对象。

public class MyClass
{
    public MyClass(
       string param1,
       string param2,
       string param3,
       string param4,
       string param5)
    {
       ...
    }
}

是否可以使用 Visual Studio 重构实用程序将所有构造函数参数封装在一个新类中?

public class MyClass
{
    public MyClass(MyClassParameters parameters)
    {
       ...
    }
}

public class MyClassParameters
{
    public string Param1 { get; set; }
    public string Param2 { get; set; }
    public string Param3 { get; set; }
    public string Param4 { get; set; }
    public string Param5 { get; set; }
}

所以我的问题是

  • 我可以使用 Visual Studio 来做到这一点,所以我不必手动将所有参考更新为 classMyClass吗?
  • 是否有其他支持此功能的重构工具,例如Resharper或其他?

这是一项艰巨的工作,因为在我的单元测试套件中有数千个对这个类的引用。

4

3 回答 3

4

内置的C# 重构选项不包括“引入参数对象”重构。

ResharperRefactor Pro(都是商业的)确实有它。

于 2012-03-08T16:38:56.387 回答
3

你有ReSharper吗?
使用 ReSharper 将光标设置在构造函数上,按Ctrl+RCtrl+R并选择Extract Class From Parameters...

于 2012-03-08T16:39:36.263 回答
0

如果该类已经在各处使用,您可以做的只是创建另一个采用 MyParameter 参数的构造函数,复制旧功能(将每个参数的引用更新到 MyParameter 属性/字段),然后只需旧构造函数读取:

public MyClass(
   string param1,
   string param2,
   string param3,
   string param4,
   string param5) : this(new MyParameter(param1, param2...))
{
}

不是最漂亮的解决方案,但正如 Oded 所提到的,没有“内置”方法来重构构造函数参数。

于 2012-03-08T16:40:38.070 回答