.Net 2.0新功能:重构(Refactoring)(4)
2008-08-21 07:13
381 查看
【3】封装字段
<1>可以从现有字段快速创建属性,然后使用对新属性的引用无缝更新代码。
<2>当某个字段为public(C# 参考)时,其他对象可以直接访问该字段并对其进行修改,而不会被拥有该字段的对象检测到。通过使用属性(C# 编程指南)封装该字段,可以禁止对字段的直接访问。
<3>仅当将光标与字段声明置于同一行时,才可以执行“封装字段”操作。
◆实例
大部分开发者都习惯把类级的变量(字段)暴露给外界。由于每一个对象都属于面向对象编程,所以开发者应该允许通过属性或方法来存取变量。这种情况可以使用重构菜单下的“封装字段”选项来进行处理。
为此,选择你想包装在一个属性中的类级变量并且选择"封装字段"选项。这将打开一个如下图所示的对话框:
你需要输入该属性的名字并且决定是否你想从类外或类内部更新到该变量的参考。就象“重命名”对话框一样,你可以在应用之前先预览一下所作的改变。
源代码:
封装后代码:
【4】提取接口
<1>使用来自现有类、结构或接口的成员创建新接口的简单方法。
<2>当几个客户端使用类、结构或接口中成员的同一子集时,或者当多个类、结构或接口具有通用的成员子集时,在接口中嵌入成员子集将很有用。
<3>仅当将光标定位于包含要提取成员的类、结构或接口中时,才可以访问此功能。当光标处于此位置时,调用“提取接口”重构操作。
◆实例
【5】将局部变量提升为参数
<1>提供一种简单的方法,以在正确更新调用站点的同时将变量从局部使用移动至方法、索引器或构造函数参数.
<2>调用“将局部变量提升为参数”操作时,变量将被添加到成员参数列表的结尾处.
<3>对已修改成员的所有调用都将使用新参数(将替代最初赋给该变量的表达式)立即进行更新,并保留代码,以使其像变量提升之前那样正常工作.
<4>将常数值赋值给提升的变量时,此重构操作效果最好。必须声明并初始化该变量,而不能仅声明或仅赋值.
◆实例
源代码:
选中s,转换后,
【6】移除参数
<1>从方法、索引器或委托中移除参数的简单方法.
<2>在调用成员的任何位置,都会将参数移除以反映新声明.
◆实例
源代码:
移除后的代码:
【7】重新排列参数
<1>对方法、索引器和委托的参数顺序进行更改的简单方法.
<2>可以通过方法声明或方法调用来重新排列参数。要将光标置于方法声明或委托声明中,而不是置于正文中。
◆实例
源代码:
重新排列后,
<1>可以从现有字段快速创建属性,然后使用对新属性的引用无缝更新代码。
<2>当某个字段为public(C# 参考)时,其他对象可以直接访问该字段并对其进行修改,而不会被拥有该字段的对象检测到。通过使用属性(C# 编程指南)封装该字段,可以禁止对字段的直接访问。
<3>仅当将光标与字段声明置于同一行时,才可以执行“封装字段”操作。
◆实例
大部分开发者都习惯把类级的变量(字段)暴露给外界。由于每一个对象都属于面向对象编程,所以开发者应该允许通过属性或方法来存取变量。这种情况可以使用重构菜单下的“封装字段”选项来进行处理。
为此,选择你想包装在一个属性中的类级变量并且选择"封装字段"选项。这将打开一个如下图所示的对话框:
你需要输入该属性的名字并且决定是否你想从类外或类内部更新到该变量的参考。就象“重命名”对话框一样,你可以在应用之前先预览一下所作的改变。
源代码:
string s; |
string s; public string S { get { return s; } set { s = value; } } |
<1>使用来自现有类、结构或接口的成员创建新接口的简单方法。
<2>当几个客户端使用类、结构或接口中成员的同一子集时,或者当多个类、结构或接口具有通用的成员子集时,在接口中嵌入成员子集将很有用。
<3>仅当将光标定位于包含要提取成员的类、结构或接口中时,才可以访问此功能。当光标处于此位置时,调用“提取接口”重构操作。
◆实例
【5】将局部变量提升为参数
<1>提供一种简单的方法,以在正确更新调用站点的同时将变量从局部使用移动至方法、索引器或构造函数参数.
<2>调用“将局部变量提升为参数”操作时,变量将被添加到成员参数列表的结尾处.
<3>对已修改成员的所有调用都将使用新参数(将替代最初赋给该变量的表达式)立即进行更新,并保留代码,以使其像变量提升之前那样正常工作.
<4>将常数值赋值给提升的变量时,此重构操作效果最好。必须声明并初始化该变量,而不能仅声明或仅赋值.
◆实例
源代码:
private static void NewMethod2() { string s = ""; } |
private static void NewMethod2(string s) { } |
<1>从方法、索引器或委托中移除参数的简单方法.
<2>在调用成员的任何位置,都会将参数移除以反映新声明.
◆实例
源代码:
protected void Page_Load(EventArgs e, object sender) { int i = 0; NewMethod2("1","2"); } private static void NewMethod2(string s1, string s2) { string s = s1 + s2; } |
protected void Page_Load(EventArgs e, object sender) { int i = 0; NewMethod2(); } private static void NewMethod2() { string s = s1 + s2; } |
<1>对方法、索引器和委托的参数顺序进行更改的简单方法.
<2>可以通过方法声明或方法调用来重新排列参数。要将光标置于方法声明或委托声明中,而不是置于正文中。
◆实例
源代码:
private static void NewMethod2(string s1,string s2) { } |
private static void NewMethod2(string s2,string s1) { } |
相关文章推荐
- .Net 2.0 新功能:重构(Refactoring
- .Net 2.0新功能:重构(Refactoring)(2)
- [C#] .Net 2.0 新功能:重构(Refactoring)[ZT]
- .Net 2.0 新功能:重构(Refactoring)
- .Net 2.0新功能:重构(Refactoring)(3)
- .Net 2.0 新功能:重构(Refactoring)
- .Net 2.0 新功能:重构(Refactoring)
- .Net 2.0 新功能:重构(Refactoring)
- .Net 2.0 新功能:重构(Refactoring)
- .Net 2.0新功能:重构(Refactoring)(1)
- .Net 2.0 新功能:重构(Refactoring)
- Net 2.0 新功能:重构(Refactoring)
- .Net 2.0 新功能:重构(Refactoring)
- .Net 2.0 新功能:重构(Refactoring)
- .Net 2.0 新功能:委托中的协变与逆变(Covariance and Contravariance in Delegates)
- .Net 2.0 新功能:WebParts概述
- .Net 2.0 新功能:命名空间别名限定符(namespace alias qualifier)
- .Net 2.0 新功能:Parital Classes(分部类)
- .Net 2.0 新功能:代码段(Code Snippets)
- .Net 2.0 新功能:Parital Classes(分部类)