Сегодня мы закончим разбираться с классами в C# (с точки зрения AS3 разработчика) и подготовимся к следующей статье, в которой мы сможем познакомиться с понятиями, аналогов которых нет в AS3. В текущей статье мы рассмотрим способ реализации:
— геттеров/сеттеров (getter/setter)
— функций и классов, которые нельзя переопределять/наследовать (final)
— констант
— пакетов
Get/Set функции
Давайте начнём с геттеров и сеттеров. Чтобы освежить память, вот, как они выглядели в AS3:
А вот, эквивалент в С#:
Как мы можем увидеть, в C#, вместо объявления 2 функций, геттер и сеттер объявлены в виде единственной переменной. Правда, эта переменная не заканчивается точкой с запятой (;), а содержит блок в виде фигурных скобок, внутри которого есть 2 части: get{} и set{}. Эти части являются геттер и сеттер функциями. Внутри сеттера у вас будет доступ к новому ключевому слову value, оно представляет собой значение, которое должно быть установлено и вам не нужно объявлять его, как это приходилось делать в AS3. Если не брать в расчёт это отличие в синтаксисе, геттеры и сеттеры работают одинаково в C# и AS3.
C# предоставляет возможность использовать сокращённую запись для подобных функций, позволяя избежать написание лишнего кода для простых функций:
Использование этой конструкции автоматически создаст переменную _name и геттер/сеттер функции, как в примере выше. Но что, если вам не нужна функция-сеттер? Просто уберите её:
Скорее всего, вам необходимо будет, как минимум, предоставить возможность классу Person устанавливать значения этой переменной. Для этого сеттер может быть объявлен private:
И ещё, немного терминологии C#: поля класса, у которых есть get и/или set функции (Name), называются “свойства”. Переменные, которые используются для хранения этих данных (_name), называются “вспомогательные поля”.
Final/sealed функции
А теперь, давайте поговорим о final функциях, которые не могут быть переопределены (AS3):
С# предоставляет идентичный функционал, используя слово sealed:
Пакеты и namespace
Пакеты в AS3:
В C#, пакеты называются namespace, вот и всё:
Чтобы получить доступ к пакету внутри .as файла, вы можете импортировать пакет:
В C# вы используете ключевое слово using для namespace:
Константы и readonly переменные
И напоследок, давайте поговорим о константах. Вот, как в AS3 может быть создано поле, которое нельзя изменить после объявления:
Вот, как это можно сделать в C#:
Важный нюанс: в C# для констант можно использовать только базовые типы (например, int) и строки. Это необходимо потому, что подобное поле не будет существовать на самом деле, вместо этого, везде, где оно используется, будут подставлены значения этого поля. Так же, это означает, что подобные поля автоматически становятся статическими (static), и их не нужно объявлять, как static отдельно. После компиляции класс Person в C# будет выглядеть следующим образом:
В AS3 ключевое слово const использовалось исключительно для проверки на этапе компиляции и не приводило к изменениям/подстановкам в коде. Если необходимо добиться похожего поведения в C# или необходимо использовать не базовый тип данных (например, Person), то нужно использовать ключевое слово readonly:
В примере выше присутствует 2 readonly поля:
1) Newborn – поле, которое было объявлено с ключевым словом static (readonly поля, в отличии от констант, не обязательно являются static). Данное поле будет инициализировано в том месте, где оно объявлено (по-аналогии с константами в AS3).
2) Age – поле, которое является readonly, но не является static. Оно будет инициализировано в конструкторе.
В завершении, сравнение описанных особенностей C# и AS3 кода:
ИСТОЧНИК: habrahabr.ru |
Комментариев нет:
Отправить комментарий