
Перевод статьи From AS3 to C#, Part 1: Class Basics
Эта статья поможет разобраться в основах C# тем AS3 разработчикам, которые решили переключиться на Unity, но абсолютно не знакомы с программированием на C#.
Начнём с главного: С# файлы имеют расширение .cs, а не .as как AS3 файлы. Внутри файлов вы найдёте описание классов, из которых состоят приложения (аналогично AS3 файлам). Например, файл MyClass.cs:
class MyClass { }
Название классов в C# подчиняется той же конвенции, что и названия классов в AS3: каждое слово в названии класса должно начинаться с большой буквы, остальная часть названия пишется в нижнем регистре. Как вы могли заметить, базовый синтаксис классов в C# такой же, как у классов в AS3.
Теперь давайте добавим переменную:
class MyClass { int X; }
Определение переменных в C# отличается от AS3. Вместо var x:int, нужно использовать int X. Конвенция названий говорит, что названия переменных должны начинаться с большой буквы.
Давайте посмотрим на функции:
class MyClass { void Foo() { } }
Функции в C# так же отличаются от функций в AS3. В C# не используется ключевое слово function, возвращаемый тип данный указывается вначале (а не в конце, как это было в AS3), название функций должно начинаться с большой буквы, исходя из конвенции названий.
Функция с входящими параметрами:
class MyClass { void Foo(int x, int y, int z) { } }
Параметры функций, так же, как и в AS3, находятся внутри скобок, но записываются они немного по-другому: вначале тип, потом имя, с пробелом между ними. Конвенция говорит, что названия параметров функций должны начинаться с маленькой буквы.
Как и в AS3, параметры функций могут иметь значения по-умолчанию:
class MyClass { void Foo(int x = 1, int y = 2, int z = 3) { } }
Функция-конструктор:
class MyClass { MyClass() { } }
Как и в AS3, нам не обязательно указывать тип возвращаемого значения для функций-конструкторов. Вообще-то, у вас не получится указать даже тип данных void, как это можно было сделать в AS3. Так же, для объявления этого типа функций, не используется ключевое слово function.
Вы можете иметь больше одной функции-конструктора, это называется «перегрузка» функций:
class MyClass { MyClass() { } MyClass(int x) { } MyClass(int x, int y, int z) { } }
Перезагрузка так же доступна для других функций:
class MyClass { void Foo() { } void Foo(int x) { } void Foo(int x, int y, int z) { } }
Чтобы компилятор мог определить, какая из функций вызывается, необходимо придерживаться 2 правил. Во-первых, вы не можете иметь 2 функции с одинаковыми параметрами:
class MyClass { void Foo(int x, int y, int z) { // Какой-то функционал } void Foo(int x, int y, int z) { // Какой-то другой функционал } }
Это же касается тех функций, вызов которых может выглядеть одинаково, если не будет указан один из параметров по-умолчанию:
class MyClass { void Foo(int x, int y, int z) { // Какой-то функционал } void Foo(int x, int y, int z, int w = 0) { // Какой-то другой функционал } }
Во-вторых, вы не можете «перегружать» функции по типу данных, который они возвращают:
class MyClass { int Foo(int x, int y, int z) { return 0; } uint Foo(int x, int y, int z) { return 0; } }
Придерживаясь этих двух простых правил, вы сможете «перегружать» функции, сколько ваша душа пожелает =)
Как и в AS3, для определения статических функций необходимо добавить ключевое слово static:
class MyClass { static void Foo() { } }
То же самое со статическими переменными:
class MyClass { static int X; }
Теперь, когда мы знаем, как внутри классов определять классы, переменные, функции и конструкторы, давайте рассмотрим как использовать их:
void SomeCode() { // Вызов конструктора по-умолчанию (например, без входящих параметров) MyClass mc = new MyClass() // Вызов другого конструктора mc = new MyClass(5); // Вызов функции mc.Foo(); // Вызов перегруженной функции mc.Foo(1, 2, 3); // Вызов статической функции MyClass.Foo(); // Получение значения переменной mc.X; // Установка значения переменной mc.X = 1; // Кстати, однострочные комментарии работают так же, как и в AS3... /* ... многострочные комментарие тоже. */ }
Всё это очень похоже на AS3. Обратите внимание, что локальная переменная mc начинается с маленькой буквы, как и параметры функций.
Давайте обсудим модификаторы доступа. Стандартные модификаторы public, private и protected имеют такой же синтаксис и такое же поведение, как и в AS3. Для их использования достаточно просто добавить их перед возвращаемым типом данных функции, типом переменной или ключевым словом class:
public class MyClass { private int X; protected void Foo() { } }
В C#, как и в AS3, существует модификатор доступа internal, который имеет такое же название, но немного другое поведение (по-сравнению с AS3). В AS3 модификатор internal означает «доступно для текущего класса и других классов в текущем пакете». В C# он означает «доступно для текущего класса и остальных классов в текущей сборке». Я расскажу про понятие «сборки» в других статьях, но пока что, думайте о них, как о группе классов, собранных в одном бинарном файле.
Так же, в C# есть модификатор protected internal, который является комбинацией protected и internal.
В завершении, сравнение описанных особенностей C# и AS3 кода:
|
|
Этим завершается первая часть цикла статей «С# для AS3 разработчиков». Следующие статьи будут касаться более сложных тем, включая такие особенности C#, аналоги которых не существуют в AS3.
Оставайтесь на связи!
