我的情况是,我的代码中必须为大量方法执行相同的重复重构任务。 例如,想象一个具有100个方法的接口,每个方法都有一个或多个参数以及返回值。对于这些方法中的每一个,我需要跳转到实现更改返回类型并添加一行代码,将旧的返回值转换为接口方法调用者的新类型。
有没有办法快速自动化这种重构? 我甚至想过编写一个自定义脚本来做这件事,但写一个智能脚本大约需要花费比实际操作更长的时间。
支持此类任务的工具可以节省大量时间。
答案 0 :(得分:1)
这是一个很好的问题,但是在您发布之后的时间内(更不用说您在发布前搜索答案的时间),您可以手动完成更改。
我知道,我知道,这完全不令人满意,但如果你认为它是一种调解形式,而且每年只做一次,那就不是那么糟糕了。
答案 1 :(得分:1)
如果您的问题是一个界面有100种方法,那么我同意另一张海报:只是这样做可能看起来很痛苦,但是它的工作量有限,你可以很快完成。
如果您反复遇到此问题,或者您有非常大的代码库(许多很多接口要执行此任务),那么您需要的是实现自动更改的工具:program transformation engine 。这样的工具提供了解析源代码,构建程序表示(抽象语法树)的能力,并且使得能够通过过程接口和/或通过源到源转换模式在树上应用“脚本化”操作。
OUr DMS Software Reengineering Toolkit就是这样一个程序转换系统。它有一个C# Front End来启用它的应用程序到C#代码。为复杂任务配置这样的工具不是几个小时,因此它对“小规模”更改没有用。对于大规模的更改,这样的工具可以使手工操作变得不切实际。
答案 2 :(得分:0)
Resharper和CodeRush都具有可以帮助完成此类任务的功能。
Resharper的change signature功能可能是最接近的匹配。
答案 3 :(得分:0)
你不能从你的课程中生成一个新界面,然后删除你不需要的界面!如果它就这么简单!!
答案 4 :(得分:0)
更改返回类型:通过更改...返回类型,前提是它不是标准类型(...),并且转换器可以由TypeConverter实现。
当我有这么无聊的任务时,我经常切换VS2010并使用一个允许正则表达式搜索和替换的工具。在您的示例中,可能更改'return xxx;'通过'var yyy = convert(xxx);返回yyy;'
(例如编辑器Notepad ++(免费)allready提供了一些改变项目中所有内容的可能性(谨慎使用))