c# - 将代码移动到其他类,同时保留 API

标签 c# visual-studio-2017 resharper

我有一个包含太多行代码的类。因此,我试图在不破坏公共(public) API 的情况下将其重构为更小的功能 block 。

假设我们有这段代码

class MyClass
{
    public static void DoSomething() { ... }
}

现在我想将该方法移动到另一个类中,不会破坏现有代码。因此,该方法的客户仍然应该能够引用旧方法,然后旧方法只调用新类中的新方法。

当然我可以标记方法主体,“提取方法”(来自 R#),最后标记旧方法 Obsolete。然而,在数百种方法上这样做非常烦人。

我正在寻找类似于 Resharpers Refactor-->Move 的东西,但是根本不触及现有代码,以免破坏我的程序集的客户。

所以最后我需要这个:

class NewClass
{
    public static void DoSomething() { ... }
}
class LegacyClass
{
    public static void DoSomething() { NewClass.DoSomething(); }
}

最佳答案

我这样做的方式是:
1.使用Resharper从原始类创建一个接口(interface)。
2. 将原来的类(class)拆分成新的类(class)。
3. 把接口(interface)变成原来类的外壳。
4.在Notepad++中使用键盘宏来转:

void DoSomething();

进入

 public void DoSomething() { NewClass.DoSomething(); }

虽然这不适用于静态方法。

OTOH,你可能想多了。 “数百”听起来很多,但每个功能需要 10 秒,手动完成可能只需要一个小时左右。与尝试自动化或寻找完美解决方案相比,您花费的钱很容易。

关于c# - 将代码移动到其他类,同时保留 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58024103/

相关文章:

c# - 告诉 resharper 使用 string.Format 在 C# 中生成 ToString?

c# - LINQ to 实体查询,在使用导航属性之前检查 null

c# - 如何从列表类型中获取模板类型?

c# - 如何使用 C# 和 Newtonsoft JSON 求和值?

c# - 为什么 Resharper 认为具有属性 "SomeValue"的内部类在外部类中隐藏了一个同名的属性?

visual-studio - Resharper - 如何导入所有缺失的命名空间?

c# - 在运行时执行 C# 或 VB.NET 代码

docker - Windows的Docker:Linux和Windows容器之间的通信

c# - 为什么编译器不会提示并非所有路径都返回?

c - 学校编程类问题(Visual Studio)