Visual Studio 2010:复制类最简单的方法是什么?

9
有没有一种简单的方法可以复制一个类并使用不同的名称?

1
如果你打算保留旧类,我认为你的设计有缺陷。 - PrettyPrincessKitty FS
6个回答

9

我不确定这是否可以被称为最简单的方法,但如果你拥有ReSharper,你可以使用它的Copy Type重构来复制类/接口/结构体,并控制复制所在的命名空间和复制品内的命名 - 这意味着如果你正在复制一个具有5个构造函数的类,复制品将会被全部重命名以匹配新类的名称。

然而,根据你想要实现什么,使用Extract InterfaceExtract Superclass可能是更好的选择。


6

重构以给出新名称,复制,撤消,粘贴 :-) 记得要撤销!这将重命名构造函数和终结器!


1
现在这才是在Visual Studio中真正的解决方案。虽然很遗憾它必须如此困难,但这比手动编辑每个类名的出现要好得多。 - Chris Morgan
随着PowerTools在VS 2022中取消了“复制为类”功能,这个答案再次变得相关,并且能够完成工作。 - mdisibio

5

没有针对类似复制一个类但使用不同名称的重构工具。

我想这个功能之所以不存在是因为复制代码通常被认为是不好的主意。我建议您将您的类更改为基类,然后从中创建两个派生类,在需要更改行为的地方覆盖方法。


1
几乎可以肯定他们会修改类。你提到的两个派生类,在大多数情况下,当你拥有相同的属性但不同的值时,一个将是另一个的副本...因此,同样的情况出现了。 - John Stock

3
首先:现在有一个“复制类”选项,可以使用MS Powertools for VS(市场)。
其次:对于所有更好的批评者 - 有合法的情况需要将类作为起点进行复制。例如,我有一个基类,并从中派生出数十个具有不同实现的类,但我确实有一个“参考类”,它已经包含了覆盖,注释等,因此我不必一遍又一遍地重复相同的工作。 这只是许多需要复制类的情况之一。

1
同意,确实有合理的情况。例如,我目前有多个从抽象类派生出来的派生类。它们都使用不同的值覆盖了基本属性。因此,在它们之间90%的源代码都是相同的,只有值不同。因此,在这种情况下,复制并更改是最好的选择,而不是重新设计整个系统。简单即可行。 - John Stock
@JohnStock 如果派生类中有90%的代码相同,为什么不在基类中实现呢?你做错了。 - Igor Levicki
@IgorLevicki,为什么不能将它放在基类中有很多原因,其中最明显的是分离项目,现有代码库无法修改,序列化问题等等。 - Hefaistos68
@Hefaistos68 抱歉,但没有合法的理由在多个派生类中复制粘贴90%的代码。无论是谁这样做都不应该编写代码,因为他们只会留下一堆混乱的代码,让其他人稍后必须费力地浏览和重构。 - Igor Levicki

1
  • 在Visual Studio中打开文件。
  • 按下Ctrl+A
  • 按下Ctrl+C
  • 为新类创建一个新文件。
  • 在新文件中按下Ctrl+V
  • 用新名称替换所有旧的类名。(Ctrl+H

2
恰恰相反,这与所要求的完全相反。 - Phil

0
通常最好重构你的类,使其可重用。复制粘贴代码会导致在多个位置修复相同的代码,并且违反面向对象的原则,这会带来很多痛苦。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接