微软对重构的定义:
重构是在编写代码后通过更改代码的内部结构而不更改代码的外部行为来改进代码的过程。
在C#中,重构主要有以下几种:
1.提取方法重构
const double PI = 3.1415926;
double CalculatePaintNeeded(double paintPerUnit, double radius)
{
double area = PI * paintPerUnit * radius;
return area / paintPerUnit;
}
选中double area = PI * paintPerUnit * radius; 进行CTRL+R、M
显示以下内容
提取方法是一种重构操作,它提供了一种从现有成员中的代码片段创建新方法的简单方法。
使用提取方法,您可以通过从现有成员的代码块内部提取选定的代码来创建新方法。提取的新方法包含所选代码,现有成员中的所选代码将替换为对新方法的调用。通过将代码片段转换为自己的方法,您可以快速准确地重新组织代码,从而获得更好的重用性和可读性。
提取方法具有以下优点:
-
通过强调离散的、可重用的方法,鼓励最佳编码实践。
-
鼓励通过良好的组织自我记录代码。
使用描述性名称时,高级方法可以读起来更像一系列注释。
-
鼓励创建更细粒度的方法以简化重写。
-
减少代码重复。
2.重命名重构
class ProtoClassA
{
public void MethodB(int i, bool b) { }
}
class ProtoClassC
{
void D()
{
ProtoClassA protoClassA = new ProtoClassA();
protoClassA.MethodB(0,false);
}
}
鼠标放在protoClassA.MethodB(0,false);中MethodB处 CTRL+R,M
重命名是 Visual Studio 集成开发环境 (IDE) 中的一项重构功能,它提供了一种重命名代码符号(如字段、局部变量、方法、命名空间、属性和类型)标识符的简单方法。重命名可用于更改注释和字符串中的名称,以及更改标识符的声明和调用。
3.封装字段重构
class Program
{
static void Main(string[] args)
{
Square square = new Square();
square.width = 110;
square.height = 150;
Console.WriteLine("width={0}", square.width);
Console.WriteLine("height={0}", square.height);
}
}
class Square
{
// Select the word 'width' and then use Encapsulate Field.
public int width, height;
}
双击width按快捷键CTRL+R+M
通过封装字段重构操作,可以从现有字段快速创建属性,然后使用对新属性的引用无缝更新代码。
当一个字段是公共的时,其他对象可以直接访问该字段,并且可以修改它,而拥有该字段的对象不会检测到它。通过使用属性来封装该字段,可以禁止直接访问字段。
若要创建新属性,"封装字段"操作将要封装的字段的访问修饰符更改为private,然后为该字段生成get和set访问器。在某些情况下,仅生成一个访问器,例如,当字段声明为只读时。get
重构引擎使用对"封装字段"对话框的"更新引用"部分中指定区域中新属性的引用来更新代码。
备注
只有在将光标与字段声明置于同一行时才可以执行“封装字段”操作。
对于声明多个字段的声明,“封装字段”会使用逗号作为字段之间的边界,并对最邻近光标且与光标处于同一行的字段启动重构。还可以通过在声明中选择字段的名称来指定想要封装的字段。
4.提取接口重构
提取接口是一种重构操作,它提供了一种简单的方法来创建具有源自现有类、结构或接口的成员的新接口。
当多个客户端使用来自类、结构或接口的相同成员子集时,或者当多个类、结构或接口具有共同的成员子集时,在接口中体现成员子集会很有用
提取接口在新文件中生成一个接口,并将光标置于新文件的开头。您可以使用"提取接口"对话框指定要提取到新接口中的成员、新接口的名称以及生成的文件的名称。
class ProtoA
{
public void MethdB(string s) { }
}
鼠标放在要生成接口的类上即ProtoA上 CTRL+R、I
备注:
仅当光标位于包含要提取的成员的类、结构或接口中时,才能访问此功能。当光标处于此位置时,调用提取接口重构操作。
在类或结构上调用数据提取接口时,将修改基和接口列表以包含新的接口名称。在接口上调用数据提取接口时,不会修改基和接口列表。
5.移除参数重构
是一种重构操作,它提供了一种从方法、索引器或委托中删除参数的简单方法。删除参数更改声明;在调用成员的任何位置,都会删除该参数以反映新声明。
通过首先将光标定位在方法、索引器或委托上来执行"删除参数"操作。当光标就位时,若要调用"删除"操作,请单击"重构"菜单,按键盘快捷键,或从快捷菜单中选择命令。
class A
{
//Invoke on 'A'
public A(string s, int i) { }
}
class B
{
void C()
{
A a = new A('a',2);
}
}
将光标放在方法声明或方法调用中的方法上。A
注意:使用"删除参数"可以删除在成员正文中引用的参数,但不会删除方法正文中对该参数的引用。这可能会在代码中引入生成错误。但是,可以使用"预览更改"对话框在执行重构操作之前查看代码。
6.重新排列参数重构
class ProtoClassB
{
public void MethodB(int i, bool b) { }
}
class ProtoClassC1
{
void D()
{
ProtoClassB protoClassB = new ProtoClassB();
protoClassB.MethodB(1, false);
}
}
Reorder Parameters
是一个 Visual C# 重构操作,它提供了一种简单的方法来更改方法、索引器和委托的参数顺序。 更改声明,并在调用成员的任何位置重新排列参数以反映新顺序
双击MedhodB按下快捷键CTRL+R+V
官方文档可以参考这个网址 重构-微软官方文档