【问题标题】:Why there is no access modifier named "Visible"?为什么没有名为“Visible”的访问修饰符?
【发布时间】:2014-06-09 06:04:51
【问题描述】:

在 C++、Java 或 C# 等 OO 语言中,有 publicprivateprotected 等访问修饰符。有些语言还有其他修饰符,例如internal。它们都指定了谁可以访问某个变量或方法。而对于变量,这个术语访问意味着读取和修改的能力。但是最常见的访问变量的场景是让它对其他人公开可见,但保留在类中修改的能力。这是通过使用 getter setter 等许多策略来实现的。

我的问题是,为什么我们没有针对最常见场景的访问修饰符,可以命名为 visible 之类的名称?然后用它标记的变量可以被外部类或方法读取。但只能在类内修改。

【问题讨论】:

    标签: access-modifiers


    【解决方案1】:

    您的建议将鼓励在类中如何表示状态的实现细节公开。

    使用一级间接 - 属性 - 允许您将类型的公共 API 与其实现分开。这可能会有很大的好处:

    • 您可以在 when 计算一个值,例如懒惰地填充一些数据
    • 您可以更改值的存储方式,例如通过委托给其他类型
    • 您可以重命名实现细节,而不必担心破坏调用者

    我完全支持更容易公开只读状态的语言(例如,C# 6 正在使用只读自动实现的属性),但我不鼓励字段本身变得更加可见。

    【讨论】:

    • 我认为物业将永远在那里服务于它们的目的。特别是 C# 现在如何依赖于使用属性。 visible 不会取代它们。这只是另一种选择。 visible 属性怎么样?
    • @Gulshan:这是一个鼓励错误事情的选项,IMO。如果我们可以让只读属性更容易实现,为什么还要让字段更容易暴露呢?请注意,稍后将字段更改为属性是一项重大更改。至于 visible 属性 - 这就是 public string Foo { get; private set; } 所做的。
    • 谢谢。我明白了 C# 的原因。其他语言如 C++ 或 Java 怎么样?
    • @Gulshan:Java 也是如此。不想评论 C++。
    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    相关资源
    最近更新 更多