c# - 为什么不是所有字段/属性/方法都是公开的?

标签 c# oop access-modifiers information-hiding public-members

我知道这听起来很愚蠢,但我真的很想知道 :) 我目前正在学习 C#,

如您所知,您需要将“对象”(按钮、标签、文本、变量等)设置为公共(public)或您喜欢的任何内容。

但是,您仍然需要编写这样的代码:

// my point is you cant just type label1.text you need to type class.label1.text
// so there is no chance of getting bugged
//because there is label1 in each of forms/classes
 class Classlol = new class();
 classlol.label1.blabla

那么以其他形式使其无法访问有什么意义呢?为什么每件事都不公开或默认情况下不公开?

谢谢。

最佳答案

简单来说,这与你穿衣服的原因几乎相同。并不是所有的东西都应该在任何时候都暴露在公众面前。选定的内容需要公开以便其他人可以与它们交互,但其他内容是私有(private)的并且应该保留在该类内部。

不过,我可能不应该在最后一句话中使用内部这个词,因为还有第三种选择:internal 访问修饰符。 VB.NET 中使用的名称 (Friend) 可能更清楚。这表明一段数据应该对单个程序集中的所有其他类可见,但对外部隐藏。类似的类比也适用:有些事情您可能会与最亲密的 friend 分享,但仍然不想公开。

还有其他更复杂的原因,比如启用信息隐藏,最大化特定类与应用程序其余部分之间的分离,以及保持一致的公共(public)接口(interface),即使实现细节可能在版本之间发生变化,所有其中有助于良好的面向对象设计。如果您真的想了解细节,我建议您阅读一本关于面向对象编程的好书。在没有扎实的基础知识的情况下,即使不是不可能,也很难掌握像 C# 这样的面向对象语言。

默认情况下,事物不是公开的,因为它们可能包含敏感信息,或者至少是您不想作为类的公共(public)接口(interface)的一部分公开的信息。将某些内容公开是一个更大的决定,比简单地将其私有(private)化风险更大,因此您不得不明确地做出该决定。

关于c# - 为什么不是所有字段/属性/方法都是公开的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5210540/

相关文章:

java - 私有(private)的嵌套类(内部或静态)是否可以具有可公共(public)访问的方法?

c# - c# 中的 protected 与 protected 内部(再次)

C# 月亮 APNS : iOS Device Did Not Receive Notification

c# - 在 C# 中对数据网格进行排序

C++:三规则,为什么?

php - "call to undefined function"调用类方法时出错

php - __destruct() 和 __call() 创建无限循环

python - Python中的"Private"(实现)类

c# - 在虚拟模式下更改 'DataGridView' 的单元格背景颜色

c# - 无法使用 C# 从 SQL Server 中选择超过 700000 行