我对编程相对来说还比较新,想问问有没有人能帮我理解访问修饰符的作用?我知道它们针对类和变量等设置不同级别的访问权限,但为什么要限制访问呢?不允许不同的东西进行访问的目的是什么?为什么不允许任何东西都进行访问?
如果这是一个愚蠢的问题,那就抱歉啦!
我对编程相对来说还比较新,想问问有没有人能帮我理解访问修饰符的作用?我知道它们针对类和变量等设置不同级别的访问权限,但为什么要限制访问呢?不允许不同的东西进行访问的目的是什么?为什么不允许任何东西都进行访问?
如果这是一个愚蠢的问题,那就抱歉啦!
隐藏对象的内部可保护其完整性,防止用户将组件的内部数据设置为无效或不一致的状态。
一个类型往往需要强制实施特定的不变量(例如,人的ID号必须始终为8个字符长)。如果客户端能够完全访问类的每个成员,则无法强制执行这些约束。以下是一个具体示例:
public class Person
{
public string Id;
public void SetId(string newId)
{
if(newId.Length != 8)
throw new InvalidArgumentException("newId");
Id = newId;
}
}
没有任何限制阻止我访问Id
字段并将其设置为任何我想要的值!我可以这样做:
Person p = new Person();
p.Id = "Invalid Id";
这就是为什么你的私有状态需要保持 私有。
封装的一个潜在好处是,它可以通过允许开发人员限制软件组件之间的相互依赖来减少系统复杂性,从而增加鲁棒性。
假设我开发了一个类,其中有40个方法 - 其中35个方法用于连接类的内部和实现其功能,另外5个方法对客户端非常重要。现在我把这个类给你使用 - 你看到它的公共接口,里面有40个方法,其中大部分与你无关,你会问我 "这是什么乱麻??"
为了确保类型的意图清晰,您需要限制与客户端无关的任何成员的访问权限。
此外,更多的公共成员 = 更大的公共表面 = 需要测试的东西更多 = 更难维护。
作为一个经验法则,尽可能将成员设置为私有,然后逐步提高访问级别。例如,从 private
开始,然后:
protected
public