Head First C# 中文版 图文皆译 第五章 封装 page188

私有字段和方法只可以从类内部访问

一个对象要接触到另一个对象内存储的数据只有一个方法:使用返回数据的公有方法和字段。克格勃和军情五处的探员们需要使用AgentGreeting()方法,而友方间谍可以看到一切--同类的实例可以看见彼此的私有字段。

Head First C# 中文版 图文皆译 第五章 封装 page188_第1张图片

 

 

问:好,访问私有字段需要通过公有方法。但是如果类不提供访问私有字段的公有方法,而我的对象又需要访问它怎么办呢?

答:那你就不能从类外面访问。当你写一个类的时候,你要确保你给其他的对象预留了访问数据的方式。私有字段是封装的重要部分,但并不是全部。写一个封装良好的类意味着给其他对象预留合理、易用的数据访问方式,而不能让别人黑了你的数据。

问:我怎么会想要写一个别的类无法访问的字段呢?

答:有时候一个类需要保持自己需要操作的重要数据,而别的对象并不需要看见它。下面是一个例子。电脑产生随机数的时候,就会用一种叫做seeds的特殊值。你不需要知道它怎么工作,但是Random的每一个实例内都有一组数据来确保Next()方法总是可以给你一个随机值。创建一个Random实例的话,你并不能看见里面的那组数据。因为你不需要访问它--而如果你可以访问,你可能会给它赋值而使得产生的数据不再是随机的。这样,seeds对你来说就是完全封装的。

问:我发现我用过的所有事件处理器都有private关键字。它们为什么是私有的?

答:因为C#把窗体设置为只有窗体上的控件才可以触发事件处理器。在一个方法前面加上private关键字会使得它只可以从内内部使用。IDE添加事件处理方法的时候,会把它声明为私有,这样其他的窗体或者对象无法访问它。但是并没有规矩说事件处理器必须是私有的。事实上你可以自己试试看,双击一个按钮,然后把它的事件处理器修改为public。代码还是可以编译运行的。

一个对象要获取另一个

对象内存储的私有字段

只有一个方法:使用返

回该数据的公有方法。

你可能感兴趣的:(Head First C# 中文版 图文皆译 第五章 封装 page188)