Книга: C# для профессионалов. Том II
Определение класса
Определение класса
Классы определяются в C# с помощью синтаксиса, который на первый взгляд выглядит как синтаксис C++:
class MyClass : MyBaseClass {
private string SomeField;
public int SomeMethod() {
return 2;
}
}
За этим первоначальным сходством скрываются многочисленные различия в деталях.
? Не существует модификатора доступа по имени базового класса. Наследование всегда открытое.
? Класс может быть выведен только из одного базового класса (хотя из любого числа интерфейсов). Если базовый класс явно не определен, то класс будет автоматически выводиться из System.Object
, который предоставит ему всю функциональность System.Object
, из которой чаще всего используется ToString()
.
? Каждый член явно объявляется с модификатором доступа. Не существует эквивалента синтаксису C++, где один модификатор доступа может применяться к нескольким членам.
public: // нельзя использовать этот синтаксис в C#
int MyMethod();
int MyOtherMethod();
? Методы не могут объявляться как inline
. Это связано с тем, что C# компилируется в промежуточный язык (IL). Любые вставки кода происходят на второй стадии компиляции, когда JIT-компилятор выполняет преобразование из IL в собственный код машины. JIT-компилятор имеет доступ ко всей информации в IL при определении, какие методы могут подходить для вставки без необходимости каких-либо указаний в исходном коде разработчика.
? Реализация методов всегда помещается вместе с определением. Невозможно написать реализацию вне класса, как позволяет C++.
? В то время как в ANSI C++ единственными типами члена класса являются переменные, функции, конструкторы, деструкторы и перезагружаемые версии операторов, C# имеет в наличии также делегатов, события и свойства.
? Модификаторы доступа public
, private
и protected
обладают тем же самым значением, как и в C++, но существуют два дополнительных модификатора доступа:
? internal
ограничивает доступ к другому коду внутри той же сборки.
? protected internal
ограничивает доступ к производным классам, которые находятся внутри той же сборки.
? Инициализация переменных разрешается в C# в определении класса.
? В C++ ставится точка с запятой после закрывающейся фигурной скобки в конце определения класса. Это не требуется в C#.
- 9.7.1. Определение подкласса
- Определение членов класса
- Определение открытого интерфейса класса
- Определение класса символов и преобразование символов
- 11.2.10. Автоматическое определение методов чтения и установки на уровне класса
- Определение класса: наследование
- Определение типов класса
- Использование констант
- Операция new
- Переименование компонентов
- 9.8. Классы в ECMAScript 5