Разработка компиляторов

       

Модификаторы


Одним из важных принципов объектно-ориентированного подхода к программированию является инкапсуляция данных: считается, что внутреннее устройство класса и конкретная реализация его методов должны быть неизвестны внешним потребителям. Для выражения различных уровней доступности элементов программы в C# существует обширный набор модификаторов, позволяющий утверждать, что на данный момент C# обладает наиболее развитыми средствами поддержки инкапсуляции. Например, поля могут быть описаны следующим образом:

  • public (данный элемент класса доступен всем внешним потребителям)
  • protected (к такому элементу класса могут обращаться только классы, унаследованные от данного)
  • private (элемент недоступен за пределами описания класса, т.е. недоступен даже потомкам данного класса; этот модификатор ставится по умолчанию)
  • internal (элемент доступен только для классов, определенных в той же сборке, что и данный класс)

Кроме того, существуют модификаторы, изменяющие поведение элементов класса:

  • const (свидетельствует, что данная переменная не может быть изменена)
  • event (указывает, что данный элемент описывает событие; о событиях см. ниже)
  • extern (обычно описывает метод с внешней реализацией, чаще всего, импортированный из Win32)
  • override (используется в случае новой реализации виртуального метода)
  • readonly (описывает переменные, которые могут получить значение только при самом описании или в конструкторе класса)
  • static (указывает, что данный элемент принадлежит типу объекта, а не конкретному экземпляру)
  • virtual (описывает метод, который может быть переопределен в потомках класса)

Наконец, класс в целом может иметь следующие дополнительные модификаторы:

  • abstract (обозначает, что данный класс не может быть использован самостоятельно, а является только базой для классов-потомков)
  • sealed (от таких классов нельзя наследовать; кстати, по очевидным соображениям комбинация модификаторов abstract sealed запрещена)



Содержание раздела