Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материал по ооп.docx
Скачиваний:
3
Добавлен:
04.08.2019
Размер:
102.94 Кб
Скачать
  1. Классы и его элементы в c#

Статичные методы:

  • не связаны с сущностью класса

  • предоставляют статичную функциональность

  • имеют доступ только к статичным именам

  • можно вызвать без создания сущности типа, в кот. описаны

  • похожи на глоб. функции в С++ и Delphi

Статичные поля:

  • не связаны с сущностью класса, в кот. описаны

  • как глоб. переменные – имеется только 1 сущность на всё приложение

  • имеет доступ без создания сущности типа

Частичные типы:

  • возможность определения классов, структур и интерфейсов в нескольких файлах

  • задаётся ключевым словом partial

  • облегчение разработки и сопровождения

  • разделение кода, написанного человеком и кода написанного машиной

  • всё что вы пишите в разных частях одного типа, перед компиляцией собирается в один тип

  • логич. выводы

  • нельзя расширить уже откомпилированный тип

  • нельзя указать разные уровни доступа для разных частей одного типа

  • нельзя указать разные базовые классы

исключение составляет модификатор unsafe

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

Во многих отношениях структуры С# можно рассматривать как некую особую разновидность классов. С классами структуры роднит многое: для структур можно определять конструкторы (только принимающие параметры), структуры могут реализовывать интерфейсы, структуры могут содержать любое количество внутренних членов. Для структур С# не существует единого базового класса (тип System. Structure в С# не предусмотрен), однако косвенно все структуры являются производными от типа

ValueType. Вспомним, что основное назначение ValueType заключается в том, чтобы

обеспечить типы данных, производные от System . Object, членами для работы с эти-

ми типами данных как со структурными (value-based), когда значения передаются

как локальные копии, а не как ссылки на области в памяти.

При создании структуры для нее будет выделена память в области стека и теперь можем обращаться к каждому члену структуры, используя формат имя_структуры.имя_члена. Вполне возможно, что в реальном приложении для более удобного присвоения значений членам структуры нам придется определить

свой собственный конструктор или несколько конструкторов. В связи с этим не-

обходимо помнить, что мы не можем переопределить конструктор для структуры по умолчанию — тот конструктор, который не принимает параметров. Все

ваши конструкторы обязательно должны принимать один или несколько параметров.

  1. Управление памятью в .Net Framework

В ЯП Java, Perl, C# память полностью управляется автоматически garbage collector — сборщик мусора:

  • Нет необходимости ручного освобождения памяти (+)

  • Не происходит утечка памяти (+)

  • Нет возможности повторного освобождения (+)

  • Ресурсы всегда освобождаются (+)

  • Становится больше памяти (+)

  • Некоторые ресурсы требуют ручного управления (-)

Выделение памяти в .Net:

  • Значимые типы находятся в стеке и уничтожаются при окончании работы

  • Ссылочные типы находятся в динамической памяти и уничтожаются garbage collector`Ом

Выделение динамической памяти:

  • вычисляется размер нового объекта

  • проверяется наличие свободной памяти

  • при наличии памяти вызывается конструктор для инициализации

  • если памяти нет, запускается garbage collector

  1. Уничтожение объектов в C#

Финализация – для освобождения памяти:

  • Все наследники от класса object имеют метод для финализации (Finalized)

Этот метод вызывается у объектов, которые будут уничтожены при очистке памяти

  • 2 структуры для финализации:

    1. очередь финализации (очередь с объектами, которые имеют метод для финализации)

    2. расширенная очередь (очередь с объектами, которые не используются программой и ждут вызова метода с финализацией)

      • При очистке памяти объекты не уничтожаются немедленно, а перемещаются из 1 очереди во 2ю, в которой все объекты уничтожаются одной нитью

Деструкторы- методы, приводящие к уничтожению объектов

  • Метод Finalize() не может быть реализован явно, вместо него применяется деструктор

  • как метод класса, только ~ в начале

Оживление(resurrection)

  • во время финализации возможно оживление объекта при добавлении ссылки программы к объекту который финализирован

  • сбор мусора не очищает оживл объект, пока он не будет использован

  • не рекомендуется оживлять объекты

  • Метод GC.ReRegister For Finalize()

Интерфейс IDisposable

  • Finalize не гарантирует освобождение ресурсов, но согласно позволяет освобождать ресурсы вручную

  • Для этого описывается метод Dispose

Оператор Using гарантирует то, что после завершения конструкции вызывается метод Dispose

Слабые ссылки:

  1. применяются для записи данных, которые не критичны для работы приложения

  2. эти ссылки освобождаются в первую очередь

Пулинг ресурсов – применяется для работы с ресурсами которые часто создаются и уничтожаются

  1. Диаграммы UML

  2. Диаграммы UML

  3. Типизация

Тип – относительно устойчивая и независимая совокупность элементов, которые можно выделить во всём рассматриваемом множестве.

формирование системы типов:

  • задается множество базисных типов

  • всякий базисный тип считается типом

  • если a и b считаются типами, то функция из a в b считается типом и имеет тип a→b

В основе теории типов принцип иерархичности: производные типы содержат базисные как подмножества.

Преимущества типизации:

  • Лучшая структурированность за счет иерархичности

  • Разнородные элементы обрабатываются различным образом, однородные единообразно

  • Строгая типизация фиксирует несоответствие типов до выполнения программы гарантируя отсутствие ошибок и безопасность кода

классификация:

  • Строгая

  • Сильная

  • Слабая

  • Полиморфная

  • С контролем соответствия типов во время компиляции

С контролем соответствия типов во время выполнения