假设我们有一个变量,我们希望将其命名为Fubar
假设Fubar
是String
!
这意味着,我们将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;
}
}
太好了!这一切都很好,花花公子,除了我想将PROPERTY命名为Fubar,而不是原始变量怎么办?
显然,我只想重命名两个变量。但问题是,原始变量的最佳名称是什么?这种情况是否有命名惯例?
答案 0 :(得分:122)
按Microsoft's naming conventions,正确的方法是:
private string fubar;
public string Fubar { get { return fubar; } set { fubar = value; } }
但是,许多人更喜欢在私有字段前加上下划线,以帮助最大限度地减少错误大写的可能性,并在他们打算使用该属性时使用该字段,反之亦然。
因此,通常会看到:
private string _fubar;
public string Fubar { get { return _fubar; } set { _fubar = value; } }
您采取的方法最终取决于您。 StyleCop默认强制执行前者,而ReSharper将强制执行后者。
在C#6中,有一种新语法可用于声明属性的默认值或创建只读属性,从而减少了对get
中set
和{中没有任何特殊附加逻辑的支持字段的属性的需求{1}}方法。你可以简单地写一下:
public string Fubar { get; set; } = "Default Value";
或
public string Fubar { get; } = "Read-only Value";
答案 1 :(得分:9)
在私人网址前加上下划线_Fubar
答案 2 :(得分:6)
如果getter / setter中没有逻辑,请使用auto-property:
public string Fubar {get; set;}
答案 3 :(得分:6)
如果您将私有变量命名为小写,则可以右键单击它们并让VS为您生成getter / setter代码;
Refactor-> Enacpsulate Field ...
它将使用Caps命名该属性。
答案 4 :(得分:2)
编码标准的好处在于有很多选择:
选择一个适合您的惯例并一致地使用它。
Microsoft约定 - pascalCase私有字段和CamelCase属性很整洁,但由于拼写错误可能导致错误。我发现领先的下划线约定令人讨厌,因为每次键入名称时它需要两个额外的键击,但是你没有得到这么多的错别字(或者至少编译器首先捕获它们)。
答案 5 :(得分:2)
不幸的是,没有共同的约定,你必须选择最适合你的情况,我已经在不同的代码库中看到了以下所有方法。
方法1
private string fubar; //camelCase
public string Fubar{ ... }
方法2
private string _Fubar; //_PascalCase
public string Fubar{ ... }
方法3
MonoBehaviour.transform
还有一些框架需要很多创造力,比如使用属性并将其记录为成员变量,因此使用成员的样式而不是属性'造型(是的Unity!我指着你和你的private string fubarValue; //different name. Make sense 99% of times
public string Fubar { ... }
的财产/成员)
要在我们的代码库中消除歧义,我们使用自制规则:
我们的方法大部分时间都避免了对下划线的怀疑" _"同时具有更易读的代码。
player
答案 6 :(得分:2)
好吧,Framework Design Guidelines文档指出:
字段名称字段命名准则适用于静态public和 受保护的字段。内部和私有字段不包括在内 准则,并且不允许公共或受保护的实例字段 成员设计准则。
✓务必在字段名称中使用PascalCasing。
✓使用名词,名词短语或形容词来命名字段。
X请勿为字段名称使用前缀。
例如,请勿使用“ g_”或“ s_”表示静态字段。
因此,对于私有领域,没有官方建议。但是,如果在属性上使用VS 2017快速操作“转换为完整属性”,则会发生这种情况:
因此,可以安全地假设在 private 字段下加下划线是某种标准。
答案 7 :(得分:1)
c#方式是
private string _fubar;
public string Fubar
{
get
{
return _fubar;
}
set
{
_fubar = value;
}
}
但是,如果它只是一个没有额外逻辑的基本getter / setter,你可以写
public string Fubar { get; set; }
无需支持变量或其他任何内容。
答案 8 :(得分:1)
使用默认值
声明的另一种方法 private string _fubar = "Default Value";
public string Fubar
{
get { return _fubar; }
set { _fubar = value; }
}
答案 9 :(得分:0)
尽管大多数开发人员遵循Microsoft的准则,但作为游戏开发人员,我们遵循Unity的风格({one of the script source code here):
static protected Material s_DefaultText = null;
protected bool m_DisableFontTextureRebuiltCallback = false;
public TextGenerator cachedTextGenerator { ... }
答案 10 :(得分:0)
我的意思是,一个名字更好:
public string Fubar { get; private set; }
答案 11 :(得分:0)
我看到了很多过时的答案(以及代表C#6的非标准方式),所以这是2020年的答案:
// "fubar" works, too, but "_" prevents CaSe typo mistakes
private string _fubar;
public string Fubar
{
get => _fubar;
set => _fubar = value;
}
// Read-only can just use lambda to skip all those shenannigans
public string ReadOnlyFoo => "This is read-only!";