Какое максимальное количество допустимых модификаторов вы можете иметь при объявлении класса в c#? - PullRequest
0 голосов
/ 27 марта 2020

Этот вопрос больше для любопытства.

Под модификаторами я подразумеваю ключевые слова, которые вы добавляете перед объявлением класса.

например

//1       2        3             
public abstract partial class Foo
{

}

Это имеет 3 модификатора public, abstract и partial.

Модификаторы нуля, с этой точки зрения, будут выглядеть примерно так:

class Foo
{

}

Какое максимальное количество допустимых модификаторов вы можете иметь перед именем класса при его объявлении?

1 Ответ

5 голосов
/ 27 марта 2020

Максимальное число: ...

5!

(или 6, если считать unsafe)

Согласно здесь , объявление класса выглядит следующим образом:

class_declaration
    : attributes? class_modifier* 'partial'? 'class' identifier type_parameter_list?
      class_base? type_parameter_constraints_clause* class_body ';'?
    ;

Вы, вероятно, не считаете атрибуты «модификаторами», но, вероятно, будет считать ключевое слово partial как «модификатор класса» ", хотя это не фактический 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 "ключевых слов":

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

Обратите внимание, что new и protected internal могут использоваться только в объявлениях вложенных классов.

...