我可以使用Visual Studio重构类构造函数以使用新类吗?

时间:2012-03-08 16:34:20

标签: c# .net visual-studio refactoring automated-refactoring

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

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执行此操作,因此我不必手动更新所有对类MyClass的引用吗?
  • 是否有支持此功能的其他重构工具,例如Resharper或其他?

这是一项艰苦的工作,因为我的单元测试套件中有数以千计的对此类的引用。

3 个答案:

答案 0 :(得分:4)

内置的C# refactoring选项不包含"introduce parameter object"重构。

ResharperRefactor Pro(都是商业广告)确实拥有它。

答案 1 :(得分:3)

你有 ReSharper 吗? 使用ReSharper,您可以在构造函数上设置光标,按 Ctrl + R Ctrl + R 并选择 从参数中提取类。 ..

答案 2 :(得分:0)

如果已经在整个地方使用该类,那么您可以做的就是创建另一个构造函数,获取MyParameter参数,复制旧功能(将每个参数的引用更新为MyParameter属性/字段),以及只需要阅读旧构造函数:

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

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