C#. Введение в классы и объекты. Массивы объектов. Интерфейс IComparable, страница 2

5

C#. Классы и объекты

  • Пример 1:

6

C#. Классы и объекты

  • Пример 1:

7

C#. Статические поля и методы

  • Пример 2

8

C#. Статические поля и методы

  • Назначение статических полей класса и статических методов одинаковое и в С++ и в Java и в C#.
  • Статические поля класса - это поля, значения которых для каждого экземпляра класса (объекта) одинаковы (создаются статические поля отдельно от создания объекта), а статические методы предназначены для работы со статическими полями. Статический метод ссылку this не получает и поэтому обращаться к нестатическим членам класса не может. Для доступа к обычному члену класса необходимо создать объект класса, а для доступа к статическому элементу можно воспользоваться именем класса.
  • Так как в C# и в Java отсутствуют глобальные переменные и константы, то все объявления должны находиться внутри классов. В результате часто образуются классы, состоящие исключительно из статических членов. Необходимость в создании экземпляров у таких классов полностью отсутствует, так как статические поля и методы можно вызвать через имя класса. Чтобы запретить создание экземпляров данного класса создают закрытый конструктор (см. Пример 2 на слайде).

9

C#. Массивы объектов. Интерфейс IComparable

  • Пример 3. Сортировка массива объектов

10

C#. Массивы объектов. Интерфейс IComparable

  • Пример 3. Сортировка массива объектов

11

C#. Массивы объектов. Интерфейс IComparer

  • Пример 4. Сортировка массива объектов

12

C#. Массивы объектов. Интерфейс IComparer

  • Пример 4. Сортировка массива объектов

13

C#. Массивы объектов. Интерфейс IComparer

  • Пример 4. Сортировка массива объектов

14

C#. Структуры

  • Описание структуры:
  • [ Модификатор доступа ] struct ИмяСтруктуры
  • { // члены структуры – поля и методы
  • Модификатор доступа Тип имяПоля ;
  • Модификатор доступа Тип имяМетода (Параметры) {
  • // тело метода }
  • }
  • Модификаторы доступа для членов структуры: public , internal, private
  • Доступом по умолчанию для членов структуры является private
  • Создание экземпляра структуры:
  • ИмяСтруктуры имяОбъекта; // неявный вызов конструктора по умолчанию
  • ИмяСтруктуры имяОбъекта = new ИмяСтруктуры(); // явный вызов
  • ИмяСтруктуры имяОбъекта = new ИмяСтруктуры([ параметры конструктора]);
  • Доступ к полям и методам объекта:
    • имяОбъекта.имяПоля = значение;
    • ИмяОбъекта.имяМетода(параметры);

15

C#. Структуры

  • Структура – это тип данных, аналогичный классу, но имеющий ряд важных отличий от него:
    • структуры не могут иметь родителей в виде классов или других структур, но могут реализовывать интерфейсы;
    • неявным родителем любой структуры является класс Object, поэтому в структуре действуют все методы этого класса;
    • структура не может иметь наследников;
    • в отличие от классов, структуры относятся к значимым типам.
  • Значимые типы размещаются в стеке, поэтому доступ к экземплярам структур реализуется быстрее, чем к экземплярам класса (объектам). Отсюда можно сделать вывод: если у класса относительно немного полей, но в программе предполагается использовать множество объектов, полезно реализовать такой класс как структуру.
  • Замечание. Строго говоря любой значимый тип С# является структурным.
  • Описание структуры схоже с описанием класса.
  • Как и любой класс, структура неявно снабжается конструктором по умолчанию (конструктором без параметров). Его назначение - выделить экземпляру структуры память в стеке. В отличие от классов, этот конструктор нельзя перекрыть (создать явно конструктор без параметров).
  • Неявный вызов конструктора по умолчанию не приводит к инициализации полей структуры значениями по умолчанию. Для инициализации полей структуры значениями по умолчанию его нужно вызвать явно.
  • При присваивании экземпляров структур создается копия значений полей. То же самое происходит и при передачи экземпляров структур в качестве параметра по значению. Для экономии ресурсов ничто не мешает передавать структуры в методы по ссылке с помощью ключевых слов ref или out.

16

C#. Структуры

  • Пример 8.

17

C#. Структуры

  • Пример 8.

18

Контрольные вопросы

  1. Понятие класса. Синтаксис описания класса в С#. Модификаторы доступа: характеристика и примеры использования.
  2. Понятие объекта. Создание и уничтожение объектов в С#. Доступ к полям и методам объекта в С#. Конструкторы: назначение и типы. Примеры.
  3. С#. Статические поля и методы: назначение и примеры использования.
  4. Массивы объектов в С#. Сортировка массива объектов. Примеры.
  5. С#. Структуры: назначение, отличие от классов, примеры использования.

19