Книга: 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#.

Оглавление книги


Генерация: 1.132. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз