假设我们有一个变量,我们想要将其命名为Fubar
假设FubarString!

这意味着,我们将Fubar定义为:

public string Fubar;

现在,假设我们希望Fubar具有getter和setter(或换句话说,成为C#属性)!
private string Fubar;
public string Fubar_gs
{
    get
    {
        //Some fancy logic
        return Fubar;
    }
    set
    {
        //Some more fancy logic
        Fubar = value;
    }
}

好极了!没关系,如果我希望将属性命名为Fubar,而不是原始变量,该怎么办?

显然,我只是将两个变量都重命名。但是问题是,原始变量的最佳名称是什么?

有这种情况的命名约定吗?

最佳答案

对于Microsoft's naming conventions,正确的方法是:

private string fubar;
public string Fubar { get { return fubar; } set { fubar = value; } }

但是,许多人更喜欢在私有(private)字段前加下划线,以最大程度地减少在打算使用该属性(property)时误用资本和使用该字段的可能性,反之亦然。

因此,通常会看到:
private string _fubar;
public string Fubar { get { return _fubar; } set { _fubar = value; } }

您采取的方法最终取决于您。默认情况下,StyleCop将强制执行前者,而ReSharper将强制执行后者。

在C#6中,提供了新的语法来声明属性的默认值或将属性设置为只读,从而减少了对在getset方法中没有任何特殊附加逻辑的后备字段的属性的需要。您可以简单地写:
public string Fubar { get; set; } = "Default Value";
或者
public string Fubar { get; } = "Read-only Value";

10-05 23:05