【问题标题】:Is it possible to hide a field (or just manipulate/hide from autocomplete) within its own class?是否可以在其自己的类中隐藏一个字段(或只是操纵/隐藏自动完成)?
【发布时间】:2011-02-28 19:27:22
【问题描述】:

我有一个(相当)复杂的文件,其中包含通常的组件组合。

我有一个字段(称为keyloaded)和一个链接属性(称为Keyloaded)。

在课堂上工作时,我不小心直接操作了字段而不是属性。

这很可能是因为我对这一切还不太熟悉(我现在检查三次!),但是,这已经是一个私有领域,并且在使用类之外工作得很好。我可以做一些简单的事情来将其从自动完成中删除吗?

如果没有,类似情况的最佳做法是什么?

在写这个问题时,我突然想起在我的书中,他们提到了下划线......这只是最好的解决方案 - 让它看不见吗?

【问题讨论】:

    标签: c# visual-studio properties field


    【解决方案1】:

    就像 Brian 和 KBoek 提到的那样,您可以只用下划线开始您的字段。但是如果你真的想隐藏一个方法/字段/属性,你可以设置属性,如图所示。这将防止方法/字段/属性在智能感知中显示。但是,该成员仍然可以访问。

    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> _
    Public Property HiddenProperty()
        Get
            return _hiddenProperty
        End Get
        Set (value as object)
            _hiddenProperty = value
        End Set
    End Sub
    

    【讨论】:

    • 非常有趣,+1 但是,这是字段,而不是我要隐藏的属性。这是否会改变编译/输出的任何内容,还是仅在 VS/编辑器中?
    • 您应该也可以向该字段添加属性。它根本不会改变编译,它严格在编辑器中。
    【解决方案2】:

    我使用下划线作为私有字段的前缀,例如“_keyloaded”。如果属性只设置和获取字段,请考虑创建一个像这样的自动属性:

    public bool Keyloaded { get; set; }

    【讨论】:

    • 它的作用远不止这些——所以自动属性已经出来了,但是谢谢。用于命名约定。
    【解决方案3】:

    我认为微软当前的代码语法标准说字段或属性都可以是帕斯卡大小写。但是,我一直坚持字段应以下划线开头的约定。将 keyloaded 更改为 _keyloaded。我认为您会发现通过这种方式识别字段、属性和本地变量之间的区别要容易得多。

    【讨论】:

    • 它还有助于消除同名字段/属性的案例相关问题之间的混淆。我也同意 KBoek - 您可以创建一个自动实现的属性。如果您只想在该类中设置公共属性,则将语法更改为: public bool Keyloaded { get;私人套装; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多