我应该使用公共变量还是私有变量?

2024-03-31

我第一次做一个大型项目。我有很多类,其中一些具有公共变量,一些具有带有 setter 和 getter 方法的私有变量,并且相同具有两种类型。

我决定重写此代码以主要仅使用一种类型。但我不知道应该使用哪个(仅用于同一对象中的方法的变量始终是私有的,不是这个问题的主题)。

我知道理论上公共和私人的含义,但在现实世界中使用什么以及为什么?


private数据成员通常被认为是好的,因为它们提供了封装。

为它们提供 getter 和 setter 会破坏这种封装,但它仍然比public数据成员,因为该数据只有一个访问点。

在调试过程中您会注意到这一点。如果是私人的,你know您只能修改类内部的变量。如果它是公开的,您将必须搜索整个代码库以查找它的位置might被修改。

尽可能禁止 getter/setter 并创建属性private。这遵循信息隐藏的原则 - 您不应该关心类具有哪些属性。它应该是独立的。当然,在实践中这是不可行的,如果可行的话,遵循这一点的设计将比不遵循这一点的设计更混乱且更难以维护。

这当然是一个经验法则 - 例如,我只使用struct(相当于class具有公共访问权限),例如,一个简单的点类:

struct Point2D
{
   double x;
   double y;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该使用公共变量还是私有变量? 的相关文章

随机推荐

  • AWS IAM SSM - 限制实例可以运行的文档

    有没有办法限制 EC2 实例的 IAM 策略 它只能运行一小部分文档 我尝试限制对 ssm GetDocument 的访问 如下所示 Version 2012 10 17 Statement Effect Allow Action ssm
  • 当在没有外部 div 的情况下使用多个 React DOM 组件时,JSX 将无法编译

    考虑这个无法编译的例子 jsx React DOM var Hello React createClass render function return div Hello div var World React createClass r
  • std::construct_at 是否使联合的数组成员处于活动状态?

    看这个例子 godbolt https godbolt org z fh888f5ab include
  • 有 H2 数据库的实际经验吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 某些快捷方式在 Ubuntu 中的 Android Studio 中不起作用

    My AndroidStudio版本是 2 3 1 我的键盘映射是 XWin 的默认值 With this keymap the shortcut for Find Usages is Alt F7 but it not work so n
  • 与 (Child)FragmentManager 正确使用子子片段

    如何正确使用Fragment中的Fragments 我的 简化的 用例如下 我有一个带有布局片段的活动 并且该片段本身包含一个子片段 所有片段都手动添加到其父级 Activity
  • gccfilter 和 gcc 4.7.2 不起作用,停止编译

    我已经成功安装了海湾合作委员会过滤器 http www mixtion org gccfilter http www mixtion org gccfilter 在我的工具链中 过滤器实际上应该工作 因为所有 perl 模块和其他东西都已安
  • 如何通过 liquibase 更改自动增量列的起始值?

    我的数据库使用 MySql 我已经找到了如何在创建表时设置列的起始自动增量值 但我需要知道如何为现有列设置新的起始值 执行此操作的 liquibase 脚本是什么样的 MySQL 语法非常简单 ALTER TABLE mytable AUT
  • 我想将我的 firebase 信息与我的邮件连接起来

    我刚刚创建了一个联系表单 并使用 firebase 实时数据库来获取想要联系我的网站访问者的信息 现在 每次访问者从网站发送联系人提交时 我希望收到一封包含 firebase 信息表单的电子邮件 如何将 firebase 实时数据库与我的电
  • 如何在给定的时间间隔运行 Unix 命令?

    我想运行 Unix 命令 例如ls 通过脚本每隔 5 分钟一次 解释 我有一个 Unix 脚本 在该脚本中我有一个名为 ls 的命令 我希望该脚本中的 ls 命令每 5 分钟运行一次 Use watch The nflag 指定以秒为单位的
  • ObservableCollection 的替代品?

    我正在寻找替代品ObservableCollection这是线程安全的 在 UI 线程上引发事件 并且最好有一个AddRange方法 我已经在此处和其他地方看到了一些实现 但我更喜欢已经过测试和验证的实现 并且我不必自己维护 那么有人可以向
  • 使用符号批量输入时的张量流 LSTM 模型样本

    我正在为句子构建下一个字符预测 LSTM 我正在关注这里的教程https indico io blog tensorflow data inputs part1 placeholders protobufs queues https ind
  • 使用SBT构建纯Java项目

    过去我曾使用 Ant Ivy 或 Maven 来构建我的 Java 项目 我现在正在寻找非基于 xml 的解决方案 Gradle 可以编译 jar 和发布我的项目 几乎没有问题 我可以用 SBT 做同样的事情吗 如果是这样 您能否提供一个使
  • SQL 排名百分位

    我做了一个 SQL 查询 根据页面被查看的次数对页面进行排名 例如 PAGE VIEWS J 100 Q 77 3 55 A 23 2 6 现在我想做的是使用 SQL 查询找到每个页面的百分位数排名 我想使用的数学非常简单 我只想将已生成的
  • 下载大型视频文件被损坏

    在服务器端代码中 我将缓冲区大小和内容长度设置为文件长度 然后使用打开文件文件输入流 稍后使用获取输出流HttpResponse getOutputStream 并转储使用读取的数据字节文件输入流 我正在使用 Apache Tomcat 7
  • 使用希伯来数字自定义
      编号

    我想要一个使用希伯来字母数字的编号列表 就像希伯来语书籍中常见的那样 拉丁语表示法使用数字 0 9 而希伯来语则按字母顺序编号 但有时值会发生变化 我不知道这在 CSS 中是否可行 但也许在 JavaScript 中可行 我基本上想要这样的
  • Selenium webdriver 无法点击页面外的链接

    我在使用 Selenium WebDriver 时遇到问题 我尝试单击窗口页面外部的链接 您需要向上滚动才能看到它 我当前的代码相当标准 menuItem driver findElement By id MTP menuItem clic
  • 无法更改 iTunes Connect 中的主要语言

    我已向 App Store 提交了我的第一个应用程序 不幸的是 我注意到主要语言设置为德语而不是英语 我尝试更改主要语言 但出现错误 为了将此应用程序的主要语言更改为英语 美国 每个版本必须已经具有所需的英语 美国 屏幕截图 但我已经上传了
  • 如何在另一个应用程序中使用一个 gwt 应用程序的源代码

    我有两个不同的 gwt 项目 并且想要在另一个模块中使用一个 gwt 应用程序的类 有什么办法可以做到这一点吗 我遵循以下方法 在第二个项目中添加了以下两行
  • 我应该使用公共变量还是私有变量?

    我第一次做一个大型项目 我有很多类 其中一些具有公共变量 一些具有带有 setter 和 getter 方法的私有变量 并且相同具有两种类型 我决定重写此代码以主要仅使用一种类型 但我不知道应该使用哪个 仅用于同一对象中的方法的变量始终是私