在 C# 中声明 class 时可以拥有的最大有效修饰符数是多少?
What is max number of valid modifiers you can have while declaring a class in c#?
这个问题更多是出于好奇
修饰符是指在声明 class 之前添加的关键字。
例如
//1 2 3
public abstract partial class Foo
{
}
这有 3 个修饰符 public
、abstract
和 partial
。
从这个问题的角度来看,零修饰符类似于
class Foo
{
}
声明时 class 的名称前最多可以有多少个有效修饰符?
最大数量是...
5!
(如果你算的话是 6 unsafe
)
根据 here,class 声明如下所示:
class_declaration
: attributes? class_modifier* 'partial'? 'class' identifier type_parameter_list?
class_base? type_parameter_constraints_clause* class_body ';'?
;
您可能不会将属性算作 "modifiers",但您可能 会 将 partial
关键字算作 "class modifier",虽然它不是实际的 class_modifier
.
class_modifier
的名单是:
class_modifier
: 'new'
| 'public'
| 'protected'
| 'internal'
| 'private'
| 'abstract'
| 'sealed'
| 'static'
| class_modifier_unsafe
;
我们知道最长的访问修饰符是protected internal
,所以我们可以忽略所有的访问修饰符:
class_modifier
: 'new'
| 'abstract'
| 'sealed'
| 'static'
| class_modifier_unsafe
;
sealed
、static
、abstract
只能选其一,所以剩下6个"keywords":
protected
internal
new
sealed
/static
/abstract
partial
unsafe
请注意 new
和 protected internal
只能在嵌套的 class 声明中使用。
这个问题更多是出于好奇
修饰符是指在声明 class 之前添加的关键字。
例如
//1 2 3
public abstract partial class Foo
{
}
这有 3 个修饰符 public
、abstract
和 partial
。
从这个问题的角度来看,零修饰符类似于
class Foo
{
}
声明时 class 的名称前最多可以有多少个有效修饰符?
最大数量是...
5!
(如果你算的话是 6 unsafe
)
根据 here,class 声明如下所示:
class_declaration
: attributes? class_modifier* 'partial'? 'class' identifier type_parameter_list?
class_base? type_parameter_constraints_clause* class_body ';'?
;
您可能不会将属性算作 "modifiers",但您可能 会 将 partial
关键字算作 "class modifier",虽然它不是实际的 class_modifier
.
class_modifier
的名单是:
class_modifier
: 'new'
| 'public'
| 'protected'
| 'internal'
| 'private'
| 'abstract'
| 'sealed'
| 'static'
| class_modifier_unsafe
;
我们知道最长的访问修饰符是protected internal
,所以我们可以忽略所有的访问修饰符:
class_modifier
: 'new'
| 'abstract'
| 'sealed'
| 'static'
| class_modifier_unsafe
;
sealed
、static
、abstract
只能选其一,所以剩下6个"keywords":
protected
internal
new
sealed
/static
/abstract
partial
unsafe
请注意 new
和 protected internal
只能在嵌套的 class 声明中使用。