<<
>>

АТД в языке C#

С одной стороны, язык C# позаимствовал очень многие конструкции из языков C++ и Java. С другой стороны, в него включен ряд новых конструкций. Подобно языку Java, все экземпляры классов C# являются динамическими объектами и размещаются в куче.
Для всех классов предопределены стандартные конструкторы (по умолчанию), которые обеспечивают начальные значения данных (0 для целых типов и false для булевых типов). Конечно, пользователь может добавить ряд новых конструкторов, обеспечивающих специфическую инициализацию элементов данных, при этом любая экземплярная переменная, не проинициализированная пользовательским конструктором, получит значение от стандартного конструктора.

Деструкторы в языке C# тоже предусмотрены, однако используются они редко, поскольку применяется автоматическая сборка мусора.

Для создания АТД в языке C# могут быть применены структуры struct или классы. Структуры в языке C# существенно отличаются от своих прообразов в языке C++, по сути, они являются облегченными классами.

Они могут иметь конструкторы, свойства, методы, поля данных и способны реализовывать интерфейсы, но не поддерживают наследования.

Существенное различие между структурами и классами заключается в том, что структуры являются типами-значениями, а классы — ссылочными типами. Структуры размещаются в стеке, а не в куче. При использовании в

412

Глава 15. Абстрактные типы данных

качестве параметров структуры передаются по значению.
Все типы-значения в C#, включая все примитивные типы, принадлежат к структурам. Экземпляры структур могут создаваться путем их объявления, подобно экземплярам других предопределенных типов-значений, таких как int или float. Кроме того, они могут создаваться с помощью оператора new, который вызывает конструктор для их инициализации.

Структуры применяют для реализации относительно небольших и простых ти- пов, которые никогда не будут наследоваться. Они удобны для создания объектов, размещаемых в стеке (в противоположность куче).

Три уровня доступа (public, private и protected) в C# указываются тем же путем, что и в языке Java. От языка Delphi C# унаследовал свойства как средства реализации операций get() и set() (без явного их вызова клиентом). Свойства обеспечивают неявный доступ к определенным приватным данным экземпляра. К примеру, рассмотрим следующий простой класс:

В классе Observation определено свойство NumberOfDays. Это свойство обеспечивает как метод чтения (get), так и метод записи (set) для доступа к приватному элементу данных number_Days. Допустим, что фрагмент программы клиента имеет вид:

Observation ob = new Observation (); int actualPeriod, oldPeriod;

oldPeriod = ob.NumberOfDays;

ob.NumberOfDays = actualPeriod;

В этом фрагменте элемент класса number_Days рассматривается как переменная с публичным уровнем доступа, хотя на самом деле элемент приватен и доступ к нему возможен только через свойство. Обратите внимание на использование неявной переменной в методе записи. Это механизм, посредством которого ссылаются на новое значение свойства.

Пример со стеком не приводится. Разница между версией на C# и версией на Java минимальна: меняются только методы вывода сообщений и тип возвращаемого результата для метода empty() (вместо boolean надо поставить bool).

АТД в языке Ruby

413

<< | >>

Еще по теме АТД в языке C#:

  1. О языке и методе
  2. Установки — на естественном языке внутренней речи.
  3. Установки — на естественном языке внутренней речи.
  4. Формулировать задание внутренней природе организма следует на языке души
  5. Разминка антистрессовая, приемы и спецприемы, целевые установки — на естественном языке «внутренней речи».
  6. Разминка антистрессовая, приемы и спецприемы, целевые установки — на естественном языке «внутренней речи».
  7. Принцип государственного языка судопроизводства
  8. Рациональный родитель
  9. Гештальт-терапия
  10. СЕКСУАЛЬНОСТЬ
  11. Буквы А, И, С
  12. Подстройка\или созданиеподсознательного доверия допрашиваемого к допрашивающему.