在 c# 中声明一个类时可以拥有的最大有效修饰符数量是多少?

Ven*_*sky 0 c# modifier

这个问题更多是出于好奇。

我所说的修饰符是指在声明类之前添加的关键字。

例如

//1       2        3             
public abstract partial class Foo
{

}
Run Code Online (Sandbox Code Playgroud)

这有3个修饰语publicabstractpartial

从这个问题的角度来看,零修饰符类似于

class Foo
{

}
Run Code Online (Sandbox Code Playgroud)

声明类名之前可以拥有的最大有效修饰符数是多少?

Swe*_*per 5

最大数量是...

5!

(或 6 如果你数数unsafe

根据here,类声明如下所示:

class_declaration
    : attributes? class_modifier* 'partial'? 'class' identifier type_parameter_list?
      class_base? type_parameter_constraints_clause* class_body ';'?
    ;
Run Code Online (Sandbox Code Playgroud)

你可能不指望属性为“调节剂”,但你可能算的partial关键字为“类修饰”,虽然它不是一个实际的class_modifier

名单class_modifier如下:

class_modifier
    : 'new'
    | 'public'
    | 'protected'
    | 'internal'
    | 'private'
    | 'abstract'
    | 'sealed'
    | 'static'
    | class_modifier_unsafe
    ;
Run Code Online (Sandbox Code Playgroud)

我们知道最长的访问修饰符是protected internal,所以我们可以忽略所有的访问修饰符:

class_modifier
    : 'new'
    | 'abstract'
    | 'sealed'
    | 'static'
    | class_modifier_unsafe
    ;
Run Code Online (Sandbox Code Playgroud)

您只能选择sealed,static和 之一abstract,因此我们剩下 6 个“关键字”:

  • protected
  • internal
  • new
  • sealed/ static/abstract
  • partial
  • unsafe

请注意,newandprotected internal只能用于嵌套类声明。

  • 不可能,我不敢相信这是“5!”,这太多了!(数学笑话) (2认同)