防止不必要的字段访问的样式指南

本文关键字:样式 访问 字段 不必要 | 更新日期: 2023-09-27 17:52:13

我曾经在这里看到一个问题,是否有可能在属性中嵌入字段,这样它们就不能在类的其余部分中访问,例如

public string Name
{
    private string _name;
    get { return _name; }
    set
    {
        _name = value;
        // <Important stuff that would not be executed
        //  upon direct field access>
    }
}

遗憾的是这是不可能的,所以我想也许它会帮助设置一个样式准则,字段可能永远不会被访问属性之外。显然,我们不想公开每个字段,所以这些字段需要私有属性,像这样:

private int _progress = 0;
private int progress
{
    get { return _progress; }
    set { _progress = value; }
}

如果这与字段需要有下划线作为前缀的指导原则配对,则如果在类的其他地方发现下划线,则可以立即判断出出了问题。

所以我的问题——或者说问题,是:

这是个好主意吗?
对私有财产使用骆驼案例听起来合理吗?
有人能想到这样做可能会有问题的场景吗?

防止不必要的字段访问的样式指南

如果getter和setter没有副作用,那么用私有属性来包装私有字段就没有意义了。要么使用一个字段并完成它,要么使用一个auto-property。不要写六行代码来表达一行的意图;你只会让你的代码更难读。

现在,如果你的setter确实有副作用,那就是另一回事了。在这种情况下,有一个不应该在属性之外设置字段的指导方针是可以的——但是要考虑到构造函数也可能需要设置字段。(最初设置对象的状态可能需要您绕过副作用。)也可能在其他情况下你想使用这个字段(深度复制,加载/保存等),但这就是为什么"使用属性"应该是一个指导方针,而不是一个硬性规则:你想在绕过属性之前给它一些额外的考虑。

至于命名约定,这显然取决于您,但对我来说,使用camelcase属性看起来非常奇怪。在我看到的所有代码中,属性都是pascalcase,即使它们是私有的。