关于成员变量的C#命名约定

Ham*_*jan 41 c# naming-conventions

我在这里看到了一个关于SO的建议,而不是命名private/public成员变量,它们的区别仅在于第一个字符的情况.例如:

private string logFileName;

public string LogFileName
{
    get
    {
        return logFilename
    ....
Run Code Online (Sandbox Code Playgroud)

和: private System.Windows.Forms.MainMenu mainMenu;

和: DialogResult dialogResult = this.saveConfigFileDialog.ShowDialog();

和:

public Version Version
{
    get;
    set;
}
Run Code Online (Sandbox Code Playgroud)

和:

    private void CheckPollingType(PollingType pollingType)
    {
Run Code Online (Sandbox Code Playgroud)

那么,我听错了吗?这些命名约定有什么问题吗?如果是,那么有什么更好的方法呢?链接,参考是一个加号.

谢谢.

Bri*_*ndy 33

这绝对是一个非常流行的命名约定,我不明白为什么你应该反对它.

我只想建议遵循的C#通过MSDN提供的命名约定,并通过MSDN提供通用命名约定.

具体来说,他们有关于属性的说法:

使用名词,名词短语或形容词命名属性.

名词短语或形容词适用于属性,因为属性包含数据.

不要使用与Get方法名称匹配的属性.

例如,不要将属性命名为EmployeeRecord,并将方法命名为GetEmployeeRecord.开发人员不知道使用哪个成员来完成他们的编程任务.

使用肯定短语(CanSeek而不是CantSeek)命名布尔属性.或者,您也可以使用Is,Can或Has为布尔属性添加前缀,但仅限于添加值的位置.

考虑给一个属性与其类型相同的属性.

当您具有强类型的枚举属性时,该属性的名称可以与枚举的名称相同.例如,如果您有一个名为CacheLevel的枚举,则返回其值之一的属性也可以命名为CacheLevel.

我认为,如果有一个令人信服的理由反对你的建议他们会在他们的指导方针中提到它.

  • @CodeSavvyGeek:就个人而言,我会主要使用与保护相同的私有约定,但我完全理解其中的区别. (2认同)
  • @CodeSavvyGeek:这个问题实际上是关于它是否是一个不好的想法,或者不为变量成员使用资产作为财产和非资本.我认为他并不真正关心会员是受保护还是私人保密.出于这个问题的目的,他可以同样地问公众/受保护.虽然这是一个富有洞察力的观察,但你认为这不是这个问题的关键点. (2认同)

kem*_*002 20

大多数时候,类级变量都以下划线为前缀.所以myVariable实际上是_myVariable.很多人不喜欢用一个字符来改变名字,因为它太容易犯错.

做myVariable和MyVariable没有任何问题.这只是一个惯例,如果每个人都遵循它,那么它可能会工作得很好.

就个人而言,如果可能的话,我会免除私有变量,只需使用属性中的getter和setter.大多数时候(但不是所有时间),访问私有变量用于不允许在属性中进行写访问.
这可以通过以下方式解决:

public String MyVariable
{
   get;
   private set;
}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢`private set/get`,但正如你所提到的,这并不总是可行的.StyleCop不喜欢下划线. (3认同)

And*_*hop 12

通常情况下,我总是看到私人成员领先_.(假设它不是汽车财产)

private string _customerName;
public string CustomerName
{
    get{return _customerName;}
    set{_customerName = value;}
}
Run Code Online (Sandbox Code Playgroud)

当然,最终的判决是你的团队的惯例(假设你没有做一个单独的狼项目或与完全蠢货一起工作)


Sco*_*ain 8

我会用我一直用的东西把帽子戴在戒指上

class ClassName //Classes are PascalCase
{
    public ClassName(int myProperty) //Constructor arguments are named the same as the property they set but use camelCase.
    {
       _myProperty = myPropriety;
    }
    public void MyFunction(object varToBePassed) //Function names are PascalCase, passed pramaters are camelCase.
    {
        int sampleVar; //local variables are camelCase
    }
    public int MyProperty { get { return _myProperty; } } // Properties are PascalCase

    private int _myProperty; // Private fields are camelCase and start with a _
Run Code Online (Sandbox Code Playgroud)