当前位置: 首页 > 知识库问答 >
问题:

在OOP中,何时对类字段使用公共修饰符?

罗华翰
2023-03-14

当使用面向对象语言(如C#或Java)编程时,是否有一种好的情况,在类中声明一个公共字段实际上是有效的(我自己总是使用一个属性来使类的用户不依赖数据并支持数据保护)?否则,例如,C#允许你这样做,这感觉很奇怪。

共有1个答案

鄂和璧
2023-03-14

根据C#编码约定公共字段应谨慎使用:

// A public field, these should be used sparingly
public bool IsValid;

为什么?我想是因为:

  • 可以被类的任何其他用户编辑
  • 如果你想添加一些逻辑字段,那么你需要创建属性而不是字段。通过这样做,你将打破类的契约
  • 不可能重写变量

但是,有一种情况,当你需要有字段@VGR说:

public const string foo = "";
 类似资料:
  • 当使用面向对象语言(如C#或Java)编程时,是否有一种好的情况,在类中声明一个公共字段实际上是有效的(我自己总是使用一个属性来使类的用户不依赖数据并支持数据保护)?否则,例如,C#允许你这样做,这感觉很奇怪。

  • 我想创建一个用户定义的“元音”字符类,该类将匹配任何字面英语元音字母(a、e、I、o、u),以及这些字母中的任何一个与任何可能的变音符号相匹配:ắ ḗú̱åų̄ẹ́等。 这就是我试图做的,但没有用:

  • 问题内容: 我是将ES6类与React结合使用的新手,以前我一直将我的方法绑定到当前对象(如第一个示例所示),但是ES6是否允许我将类函数永久地绑定到带有箭头的类实例上?(在作为回调函数传递时很有用。)当我尝试使用CoffeeScript尝试使用它们时,会出现错误: 这样,如果我要传递给,例如,它将仅限于类实例,而不是对象。 问题答案: 您的语法略有不同,只是在属性名称后缺少等号。 这是一项实验功

  • 问题内容: 在我多年的编程工作中,我经常创建一些类,这些类仅将一些变量与其设置器和获取器组合在一起。我已经看到了这些类型的对象,这些对象称为值对象,域对象或模型对象,具体取决于使用它们的上下文。通用用法最合适的术语似乎是数据传输对象(DTO)。这描述了仅包含访问器和更改器的POJO。 我刚刚编写了一个这样的对象,其中包含大约五十个用于在图表上设置主题参数的字段。现在,我想知道是否应该将这些字段声明

  • 我在Dropwizard应用程序中设置视图时遇到了Freemarker的一个奇怪问题。 按照这里的文档,我建立了一个非常简单的示例,如下所示 使用 呈现时的预期输出是显示的HTML文档。 实际发生的情况是Freemarker抛出一个异常,抱怨——特别是——未定义。 这似乎是因为是一个公共字段,没有getter。当我添加一个公共字符串getBar(){返回栏;}getter到时,它就工作了。 我有点

  • 问题内容: 在Java中,有一种做法是声明每个变量(局部变量或类),如果参数确实存在,则声明参数final。 尽管这使代码更加冗长,但是这有助于简化代码的读取/抓取,并且由于意图被明确标记,因此还可以防止错误。 您对此有何想法,您会怎么做? 问题答案: 我认为这都与良好的编码风格有关。当然,你可以编写出色而健壮的程序,而无需在任何地方使用很多修饰符,但是当你考虑一下时… 将所有不应该改变的东西加进