重构——27封装字段(Encapsulate Field)

封装字段(Encapsulate Field)

你的类中存在一个public字段:将它声明为private,并提供相应的访问函数

一、动机

面向对象的重用原则之一就是封装,或者称为“数据隐藏”

二、做法

1、为public字段提供取值/设值函数

2、找到这个类之外使用该字段的所有地点。如果客户只是读取该字段,就把引用替换为对取值函数的调用;如果客户修改了该字段,就将此引用点替换为对设值函数的调用

3、每次修改后,编译并测试

4、将字段的所有用户修改完毕后,将字段声明为private

5、编译,测试

时间: 2024-07-29 22:52:04

重构——27封装字段(Encapsulate Field)的相关文章

重构——18自封装字段(Self Encapsulate Field)

自封装字段(Self Encapsulate Field) 你直接访问一个字段,但与字段之间的耦合关系逐渐变得笨拙:为这个字段建立取值/设置函数,并且只以这些函数来访问字段 一.动机 如果你想访问超类中的一个字段,却又想在子类中将对这个字段的访问改为一个计算后的值,这就是该用Self Encapsulate Field的时候 二.做法 1.为待封装的字段建立取值/设值函数 2.找出该字段所有的引用点,将它们全部改为调用取值/设值函数 3.将该字段声明为private 4.复查,确保找出所有的引用

c#-C#封装字段问题:两者的区别

问题描述 C#封装字段问题:两者的区别 (1) private int a; public int A { get { return a; } set { a = value; } } (2) public int a { get; set; } 这两者分别什么意思?有什么区别? 解决方案 从表面上没啥区别,当你访问这个类时, public int A { get { return a; } set { a = value; } } 只能通过类.A 而 public int a { get; s

重构——28封装集合(Encapsulate Collection)

封装集合(Encapsulate Collection) 有个函数返回一个集合:让这个函数返回该集合的一个只读副本,并在这个类中提供添加/移除集合元素的函数 一.动机 1.取值函数不应该返回集合本身 2.不应该为整个集合提供一个设值函数 二.做法 1.加入为集合添加/移除元素的函数 2.将保存集合的字段初始化为一个空集合 3.编译 4.修改所有集合设值函数的调用者 5.编译,测试 6.找出所有通过取值函数获取集合并修改其内容的函数,修改之,每次修改后,编译并测试 7.修改集合取值函数自身,使它返

重构——54封装向下转型(Encapsulate Downcast)

封装向下转型(Encapsulate Downcast) 某个函数返回的对象,需要由函数调用者执行向下转型(downcast):将向下转型动作移到函数中 一.动机 1.向下转型是一种罪恶 2.java 5以后几乎可以绝迹 二.做法 1.找出必须对函数调用结果进行向下转型的地方 2.将向下转型搬移到该函数中

c#和java中封装字段的不同

c#: private String name; public String Name { get { return name; } set { name = value; } } java: private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } 总结: 字段的使用场景:与类或者对象关系密切,建议使用private修饰

重构——33以字段取代子类(Replace Subclass with Fields)

以字段取代子类(Replace Subclass with Fields) 你的各个子类的唯一差别只在"返回常量数据"的函数上:修改这些函数,使他们返回超类的某个新增字段,然后销毁子类 一.动机 1.建立子类的目的,是为了增加新特性或变化其行为 2.子类中只有常量函数,实在没有足够的存在价值 二.做法 1.对所有子类使用Replace Constructor with Factory Method 2.如果有任何代码直接引用子类,令它改而引用超类 3.针对每个常量函数,在超类中声明一个

警告:由于xxx是引用封送类的字段,访问上面的成员可能导致运行时异常

在实现"C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能"功能时,遇到警告:由于"Screenshot.Form1.ZoomBoxHeight"是引用封送类的字段,访问上面的成员可能导致运行时异常 解决方案: 对字段对待封装:在需要封装的字段上单击鼠标右键,重构>封装字段: 输入属性名: 使用默认设置,单击应用

ReSharper 配置及用法

原文 http://www.cnblogs.com/vingi/articles/2881708.html 1:安装后,Resharper会用他自己的英文智能提示,替换掉 vs2010的智能提示,所以我们要换回到vs2010的智能提示 2:快捷键.是使用vs2010的快捷键还是使用 Resharper的快捷键呢?我是使用re的快捷键 3: esharper安装后,会做几件事情,这几件事情对于除此使用者,比较麻烦,因此归纳总结一下,以资参考. (1).会将选项--文本编辑器--C#--常规--自动

Resharper上手指南

原文http://www.cnblogs.com/renji/archive/2007/12/11/resharper.html Resharper上手指南 我是visual studio的忠实用户,从visual studio 6一直用到了visual studio 2005(典型的80后是吧).我很想开始使用Visual Studio 2008,但是我不能,因为Resharper还不兼容.NET3.5的语法. Resharper是我一直非常喜欢的工具.响当当的名声绝对不是吹牛皮吹出来的.如果