我目前有这个代码来源作为例子:
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));
我看过像这样的消息来源:
他们使用前缀_
来声明其唯一的临时值来获取或设置我随后复制的值。
我的问题是,这是遵循.NET命名约定还是如何使其与当前存在的属性名称保持类似?
答案 0 :(得分:4)
约定是使用camelCase
作为参数名称,因此它们应命名为name
和uid
。无论你是使用它们还是将它们丢弃或存放在田地里,它们是暂时的还是长寿的都无关紧要。
关于命名约定的主题,方法应使用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
*/