在方法中使用类属性命名约定

时间:2016-03-31 10:14:22

标签: c#

我目前有这个代码来源作为例子:

class Person
{
    public Person create(string _name, int _uid)
    {
        return new Person()
        {
            name = _name,
            uid = _uid,
        };
    }

    public int uid;
    public string name;
}

我知道这不是最大的交易,但我在有多个开发人员的项目上工作意味着惯例非常重要。

在官方的.NET命名约定文档中,它声明了不使用符号,但是,此方法用于添加到List<Person> People = new List<Person>();并且被调用如下:

People.Add(Person.create("Example", 1));

我看过像这样的消息来源:

C# Property Examples

他们使用前缀_来声明其唯一的临时值来获取或设置我随后复制的值。

我的问题是,这是遵循.NET命名约定还是如何使其与当前存在的属性名称保持类似?

2 个答案:

答案 0 :(得分:4)

约定是使用camelCase作为参数名称,因此它们应命名为nameuid。无论你是使用它们还是将它们丢弃或存放在田地里,它们是暂时的还是长寿的都无关紧要。

关于命名约定的主题,方法应使用PascalCase命名,因此我将create重命名为Create

您的公共字段实际上应该是属性(请参阅Jon Skeet的Why Properties Matter以获取完整的解释原因),并且还应使用PascalCase命名。

public int Uid { get; private set; }
public string Name { get; private set; }

最后,我会问为什么Person类有一个非静态方法来创建Person的实例。 joe.Create("mike", 123)对我来说没有多大意义。

MSDN有一个很好的命名约定列表here

唯一缺少的是使用私有字段的前导下划线+ snakeCase(例如_myAge)。虽然这是一种广泛使用的惯例,但微软并未认可这一点。 ReSharper等一些重构工具也鼓励了它。

答案 1 :(得分:1)

查看 readonly 关键字

恕我直言前缀“_”对于任何变量对于c#

是常见的

代码来源https://msdn.microsoft.com/de-de/library/acdd6hb7.aspx

public class ReadOnlyTest
{
   class SampleClass
   {
      public int x;
      // Initialize a readonly field
      public readonly int y = 25;
      public readonly int z;

      public SampleClass()
      {
         // Initialize a readonly instance field
         z = 24;
      }

      public SampleClass(int p1, int p2, int p3)
      {
         x = p1;
         y = p2;
         z = p3;
      }
   }

   static void Main()
   {
      SampleClass p1 = new SampleClass(11, 21, 32);   // OK
      Console.WriteLine("p1: x={0}, y={1}, z={2}", p1.x, p1.y, p1.z);
      SampleClass p2 = new SampleClass();
      p2.x = 55;   // OK
      Console.WriteLine("p2: x={0}, y={1}, z={2}", p2.x, p2.y, p2.z);
   }
}
/*
 Output:
    p1: x=11, y=21, z=32
    p2: x=55, y=25, z=24
*/