随着向C#类引入主构造函数,我发现自己正在决定在命名主构造函数的参数时采用什么样的大小写.应该是camelCased还是PascalCase?

将其与record类型进行比较,我发现其参数首选pascal大小写.

record Item(int Id, string Name);

对于类主构造函数,推荐使用什么来命名参数?

骆驼 case :

class Car(string model, string year, string brand)

pascal case :

class Car(string Model, string Year, string Brand)

请说明 Select 其中一个而不是另一个的原因.

推荐答案

在记录中,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

Csharp相关问答推荐

有没有一种方法可以防止在编译时在MicrosoftC或非单线程上下文中调用方法?

在具有主构造函数的类中初始化属性时出现警告

返回TyedResults.BadRequest<;字符串>;时问题详细信息不起作用

如何在Parall.ForEachAsync中使用CancerationTokenSource

C#-VS2022:全局使用和保存时的代码清理

持有者安全定义未显示在Swagger.NET 8中

try 在.Net核心身份注册页面中使用AJAX,但没有成功..NET Core 5.0 Razor页面应用程序

如何在用户在线时限制令牌生成?

EF核心区分大小写的主键

有条件地定义预处理器指令常量

为什么我的伺服电机不动,下面的代码?

为什么ReadOnlySpan;T&>没有Slice(...)的重载接受Range实例的?

为什么C#/MSBuild会自发地为不同的项目使用不同的输出路径?

C#命名管道-编码错误?

毛伊岛.NET 8图片不再适合按钮

在C#/ASP.NET Core 7中,什么可能导致POST请求作为GET请求发送

如何为控制器PUT操作绑定对象数组

.NET8支持Vector512,但为什么向量不能达到512位?

无法创建&Quot;&Quot;类型的实例,因为无法将一个或多个参数绑定到

C#If条件格式