方法
定义
方法(method)封装了类的行为,提供了类的对外表现。用于将封装的内部细节以公有方法提供对外接口,从而实现对外部的交互与响应。根据上一篇属性的介绍来分析,属性的读写就是通过方法来实现的。因此,方法通常实现为public。
说明
不是所有的方法实现都是public,在类内部的操作使用private,对外交互的实现使用public,这样既保证了对内部数据的隐藏和保护,又实现了类的对外交互。
namespace InsideDotNet.OOThink.Encapsulation
{
/// <summary>
/// ATM 类
/// </summary>
public class ATM
{
#region 定义私有方法,隐藏具体实现
private Client GetUser(string userID) { }
private bool IsValidUser(Client user) { }
private int GetCash(int money) { }
#endregion
#region 定义公有方法,提供对外接口
public void CashProcess(string userID, int money)
{
Client tmpUser = GetUser(userID);
if (IsValidUser(tmpUser))
{
GetCash(money);
}
else
{
Console.Write("你不是合法用户,是不是想被发配南极?");
}
}
#endregion
}
}
ATM类中用户身份验证、钱的计算,关系到银行系统的安全和隐私性,是不对外实现的。而提供返回钱款这一个外对方法即可。如带那种显示,在封装原则中,有效的保护内部数据和有效的暴露外部行为一样关键。
封装的意义
— 隐藏系统实现的细节,保证系统的安全性和可靠性。
— 提供稳定不变的对外接口。因此,系统中相对稳定部分常被抽象为接口。
— 封装保证了代码模块化,提高了软件的复用和功能分离。
封装的规则
— 尽可能地调用类的访问器,而不是成员,即使在类的内部。
— 内部私有部分可以任意更改,但是一定要在保证外部接口稳定的前提下。
— 将对字段的读写控制实现为属性,而不是方法,否则舍近而求远,非明智之选。
— 类封装是由访问权限来保证的,对内实现为 private,对外实现为 public。
结论
封装就是一个包装,将包装的内外分为两个空间,
对内实现数据私有,对外实现方法调用,保证了数据的完整性和安全性。