在记录中,C#为主要构造函数参数生成属性.因此PascalCase是合适的.
在非记录类中,主构造函数参数仅在初始化器中使用时只是参数,或者如果在方法体中使用,则可以将其翻译为字段.因此camelCase是合适的.
示例:
record R(int P);
被翻译成(通过省略记录包含的所有其他内容):
class R
{
private readonly int <P>k__BackingField;
public int P
{
get
{
return <P>k__BackingField;
}
init
{
<P>k__BackingField = value;
}
}
public R(int P)
{
<P>k__BackingField = P;
}
}
class C(int x, int y)
{
public int X { get; } = x;
public void Print()
{
Console.WriteLine(y);
}
}
翻译成:
internal class C
{
private int <y>P;
private readonly int <X>k__BackingField;
public int X
{
get
{
return <X>k__BackingField;
}
}
public C(int x, int y)
{
<y>P = y;
<X>k__BackingField = x;
}
public void Print()
{
Console.WriteLine(<y>P);
}
}
请注意,<X>k__BackingField
等名称是无效的C#标识符.这可以避免与用户声明的标识符发生冲突,并使您无法访问它们(使用反射除外).
我省略了一些细节.您可以在这里看到所有详细信息Primary constructor demo, SharpLab.io