c# 没有大括号的记录

c# record without curly brackets

我偶然注意到以下代码可以编译(VS2022preview,c#10):

record R {
  public R() {}
  int I;
}

record B : R; // no curly brackets !

(参见:https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA+tJQCYAIBKuA3gLABQuluAAgMwEAUAlMQL7lW4CWAdgC64AkgG5y7MuUzQ8AIVwgCwoA===

我很好奇 B 在没有大括号的情况下如何工作?这符合标准吗?

(如果我将记录更改为 class,这将不起作用)

https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/records

几乎与文档中所说的一样。 C# 9.0 引入了许多此类更改。顶级程序文件、顶级命名空间声明等,他们摆脱了强制花括号。

在记录 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/records 的 C# 语言规范中,record_body 子句指定为

record_body
    : '{' class_member_declaration* '}' ';'?
    | ';'
    ;

因此,大括号可以省略。