С# для AS3 разработчиков. Часть 2: Расширение классов и реализация Интерфейсов

AS3, C#, C# для AS3 разработчиков, Gamedev, Unity 17.12.2014

PostImage_600x300

Перевод статьи From AS3 to C#, Part 2: Extending Classes and Implementing Interfaces

Эта статья продолжает серию “C# для AS3 разработчиков“, и сегодня мы рассмотрим устройство классов в C# с точки зрения AS3 разработчика (наследование классов, реализация интерфейсов и наследование интерфейсов).


Начнём с наследования классов. Вот, как это выглядит в AS3:

А вот, как это выглядить в C#:

Как вы могли заметить, вместо ключевого слова extends, используется : (двоеточие).

Похожим образом обстоят дела с реализацией интерфейсов. Как это выглядит в AS3:

Та же самая структура кода, но в C#:

В С#, двоеточие используется вместо ключевого слова implements, по такому же принципу, как и с extends. Описание интерфейсов в C# похоже на описание оных в AS3.

Пример расширения интерфейсов в AS3:

Скорее всего, вы уже догадываетесь, как этот код выглядит в C#…

Давайте разберёмся, как описываются отношения между родительскими и дочерними классами/интерфейсами в C#. В AS3 вы можете использовать ключевые слова this и super в любых не статических функциях, чтобы обратиться к экземпляру текущего класса (this) или к экземпляру родительского класса (super). Например:

В данном примере, ключевое слово super обращается исключительно к переменным и функциям класса Polygon. Такой способ обращения к функциям используется крайне редко, но иногда он может помочь избежать в коде двусмысленностей, относительно того, какая из функций printDescription будет вызвана. Если бы в данном примере не использовалось слово super, то вызывалась бы функция printDescription класса Triangle, т.к. поиск в текущем классе происходит раньше родительского класса.

Ключевое слово this обращается исключительно к переменным и функциям класса Triangle. В примере, this используется, чтобы компилятор понимал, что нужно обрщаться к переменной color класса Triangle, а не к одноимённой переменной, передаваемой в конструктор.

А теперь версия на C#:

Эти два примера очень похожи, за исключением того, что в C#, вместо ключевого слова super, используется ключевое слово base. В C# base выполняет те же функции, что и super в AS3.

Другой пример использования super в AS3 (вызов родительского конструктора):

C# версия:

Помимо того, что мы снова заменили super на base, вы можете заметить, что вызов происходит до выполнения кода в конструкторе (до фигурных скобок {}). Так же, вызову конструктора родительского класса предшествует двоеточие (:). Обратите внимание, что в конце строки вызова, не ставится точка с запятой (;).

Давайте разберём, как в AS3 сделать так, чтобы класс нельзя было расширить:

Похожий функционал в C#:

В данном случае различия между C# и AS3 состоят только в названии ключевых слов. В C# класс, котоырй нельзя расширить обозначается ключевым словом sealed, а в AS3 для этого используется final, но эффект – абсолютно одинаковый.

В завершении, сравнение описанных особенностей C# и AS3 кода:

На этом мы сегодня закругляемся. В следующей статье мы поговорим о геттерах и сеттерах (getter/setter) и закончим описание основ классов. После чего, мы сможем перейти к нюансам C#, аналогов которых нет в AS3.

Похожие записи

  • Максим

    Отличное руководство,скажите, а перевод других частей ожидается?

    • Flashist

      Рад, что руководство вам понравилось) Планирую в ближайшие дни (думаю 3-5) опубликовать следующую часть перевода (новогодние дела внесли свои коррективы в процесс переводов).

      • Максим

        Жду с нетерпением,очень полезно,пытаюсь их на инглише читать,но местами остаются вопросы,так как с инглишем трудновато)

        • Flashist

          Очень прошу прощения =( Было так стыдно, что сам назвал сроки и сам же не выдержал их, что ничего не смог написать вам, чтобы предупредить, что не смогу написать статью, как предполагал =(

          Надеюсь не подвести вас и опубликовать таки перевод в ближайшее время (сроков называть не буду, чтобы снова не опростоволоситься =)

          На счёт проблем с переводом: если вам будет удобно, то я мог бы помочь вам с переводом не понятных мест вне статей. Что скажете? Если вы будете непротив, то можете написать комментарием тут места, которые вызывают у вас сомнения.

        • Flashist

          Наконец-то перевёл следующую статью) Надеюсь она вам будет полезна.