我偶然注意到下面的代码可以编译(VS2022preview, c#10):
record R {
public R() {}
int I;
}
record B : R; // no curly brackets !
(参见:https://sharplab.io/v2: EYLgxg9gTgpgtADwGwBYA + tJQCYAIBKuA3gLABQuluAAgMwEAUAlMQL7lW4CWAdgC64AkgG5y7MuUzQ8AIVwgCwoA = = =)
我很好奇没有花括号的B
是如何工作的?这符合标准吗?
(如果我将记录更改为class,则此操作不起作用)
在记录https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/records的c#语言规范中,record_body
子句被指定为
record_body
: '{' class_member_declaration* '}' ';'?
| ';'
;
因此,可以省略大括号。
https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/records
和文档上说的差不多。c# 9.0引入了许多这样的变化。顶级程序文件,顶级命名空间声明等等,他们去掉了强制花括号。