Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Obektno-orientirovannoe_programmirovanie.doc
Скачиваний:
14
Добавлен:
19.08.2019
Размер:
271.36 Кб
Скачать

8. Статические компоненты класса в c#

Без дополнительных объявлений каждый компонент относится к конкретному экземпляру. В С# существует возможность объявлять компоненты, которые будут иметь отношение ко всему классу в целом (ко всем его объектам в равной степени). Такие компоненты называются статическими. Для их объявления используется слово static. Нестатические данные хранятся в своей отдельной области памяти. Т.о. для разных объектов можно присвоить разное значение. Статические данные совместно используются всеми экземплярами класса. Для доступа к статическим данным нужно использовать только имя класса (например, SampleClass). Доступ к статическим данным м.б. осуществлен тогда, когда объект класса не создан.

Статические методы описываются с помощью static, вызываются через имя класса, а не через имя объекта. Более того, для их вызова необязательно создавать объекты данного класса. Внутри статического метода нельзя получит доступ к нестатическому данному. Наоборот можно:

Console.Wtiteline(); Int.Parse();

9. Способы достижения инкапсуляции в c#.

  1. Аналогично С++, Delphi для каждого закрытого данного создается пара открытых методов. Один из этих методов может устанавливать значение переменных.

Mutator – изменение значений

Второй метод может вернуть значение переменной в вызывающую программу (accessor).

  1. Не является 100% инкапсуляцией, но тем не менее служит для защиты данных класса. Это использование полей с модификатором readonly. Значение такого поля можно изменить только при инициализации, либо в конструкторе.

public readonly int data = 8;

Такие поля м.б. описаны с модификатором static. По сути они аналогичны полю с модификатором const. Различие: const заменяются своим значением процессе компиляции, а статические поля только для чтения на этапе выполнения программы.

  1. С помощью свойств класса (property). Свойства представляют собой объединение данных и методов в одно целое. Внешне при обращении к свойству синтаксис совпадает при обращении к полю: имя объекта.имя поля. Свойство в общем случае состоит из двух скрытых внутренних методов. Преимущество свойства заключается в том, что вместо использования 2 отдельных методов можно использовать одно свойство и работать с ним, как с открытой переменной класса.

10. Свойства классов в c#

Свойства в С# описываются как обычные переменные: public int Data, после имени идут операторные скобки {}, в которых м.б. описаны 2 блока – юлок доступа get, в котором обязательно должен быть оператор Return, и блок изменения set, в котором может использоваться ключевое слово Value, которое представляет собой правую часть выражения при изменении значения свойства.

public

{ get { return data;}

set { data = value;} }

O. Data = 23: // set

int I = O.Data; // get

Для внутреннего представления свойства реально создаются 2 метода: get_Data, set_Data. Можно создать свойства только для чтения с одним блоком get и реже – свойство для записи с одним блоком set. Свойства могут быть статическими. Справедливо все, что для статических методов.

11. Конструкторы классов в c#. Порядок вызова конструкторов.

Конструктор – специальный метод класса, который автоматически вызывается при создании объекта класса. В C# имя конструктора совпадает с именем класса. Конструктор сам по себе не создает объект класса, он только настраивает его начальное состояние. В C#, в отличие от С++, если поля класса не инициализированы явно, они будут инициализированы значениями по умолчанию. Числовые данные обычно инициализируются нулями. Конструктор по умолчанию – конструктор, который вызывается без указания параметров. Если классу не задать явно ни одного конструктора, то конструктор по умолчанию будет сгенерирован автоматически системой.

public class MyClass //конструктор есть, но он определен неявно

{…}

MyClass mc = new MyClass();

public class MyClass //конструктор определен явно

{

public MyClass( int i) {…}

}

MyClass mc = new MyClass(3);

Конструктор по умолчанию может быть сгенерирован системой только тогда, когда у класса не определено явно других конструкторов. Конструктор – обычный метод класса. Следовательно, для него возможно наличие перегруженных. У конструктора класса нет типа возвращаемого значения.

К конструктору применимы модификаторы доступа. Если private – нельзя создать объект.

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