Upcasting, downcasting

Допустим, у нас есть следующая иерархия классов: В этой иерархии классов мы можем проследить следующую цепь наследования: Object (все классы неявно наследуются от типа Object) -> Person -> Employee|Client. Причем в этой иерархии классов базовые типы находятся вверху, а производные…

Читать далее

Что такое интерфейс? Какие члены можно описывать в интерфейсе? Отличие интерфейса и абстрактного класса

Интерфейс представляет ссылочный тип, который может определять некоторый функционал — набор методов и свойств без реализации. Затем этот функционал реализуют классы и структуры, которые применяют данные интерфейсы. Определение интерфейса Для определения интерфейса используется ключевое слово interface. Как правило, названия интерфейсов в…

Читать далее

Модификаторы доступа

Все поля, методы и остальные компоненты класса имеют модификаторы доступа. Модификаторы доступа позволяют задать допустимую область видимости для компонентов класса. То есть модификаторы доступа определяют контекст, в котором можно употреблять данную переменную или метод. В языке C# применяются следующие модификаторы доступа:…

Читать далее

Что такое класс? Что такое структура? В чем отличие между структурой и классом?

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

Читать далее

Пространственное разбиение

Задача Эффективный поиск находящихся рядом объектов с помощью сохранения их в структуре данных с организацией на основе их местоположения. Мотивация Игры дают нам возможность посещать другие миры, но зачастую эти миры не сильно отличаются от нашего. У них схожие с…

Читать далее

Пул объектов (Object Pool)

Задача Улучшение производительности и эффективности использования памяти за счет повторного использования объектов из фиксированного пула, вместо их индивидуального выделения и освобождения. Мотивация Мы работаем над визуальными эффектами в игре. Когда герой кастует заклинание, мы хотим, чтобы мерцающие блестки рассыпались по…

Читать далее

Грязный флаг (Dirty Flag)

Задача Избегать ненужной работы, откладывая ее до тех пор, пока не потребуется результат. Набор первичных данных изменяется со временем. Набор вторичных данных вычисляется на основе первичных с помощью ресурсоемкого процесса. «Грязный» флаг отслеживает рассинхронизацию вторичных данных с первичными. Он устанавливается, когда первичные данные изменяются. Если флаг установлен, когда…

Читать далее

Локальность данных (Data Locality)

Задача Ускорение доступа к памяти с помощью более удобного для кэширования процессором размещения данных. Мотивация Нам лгали. Нам продолжают демонстрировать графики, где скорость процессоров растет из года в год, как будто закон Мура — это не историческое наблюдение, а закон божий.…

Читать далее

Поиск службы (Service Locator)

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

Читать далее

Очередь событий (Event Queue)

Задача Позволяет одной сущности охватывать несколько областей, не связывая их между собой. Мотивация Если вы не живете до сих под камнем, где нет доступа к интернету, вы наверняка уже слышали об «очереди событий (event queue)». Ну или хотя бы об…

Читать далее