Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

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#.

Инициализация полей членов

Синтаксис, используемый для инициализации полей членов в C#, очень отличается от синтаксиса C++, хотя конечный результат одинаковый.

Члены экземпляра

В C++ поля членов экземпляра обычно инициализируются в списке инициализации конструктора:

MyClass::MyClass : m_MyField(6) {

 // и т.д.

В C# этот синтаксис недопустим. Можно помещать в инициализатор конструктора (который является эквивалентом C# списка инициализации конструктора в C++) другой конструктор. Вместо этого инициализированное значение помечается с помощью определения члена в определении класса:

class MyClass {

 private int MyField = 6;

Отметим, что в C++ это будет ошибкой, так как C++ использует примерно такой же синтаксис для определения чисто виртуальных функций. В C# такое действие считается нормой, так как C# не применяет синтаксис

=0
для этой цели (он использует вместо этого ключевое слово
abstract
).

Статические поля

В C++ статические поля инициализируются с помощью отдельного определения вне класса:

int MyClass:MyStaticField = 6;

На самом деле в C++, даже если не требуется инициализировать статическое поле, необходимо включить эту инструкцию, чтобы избежать ошибки компоновки. В противоположность этому C# не ожидает подобной инструкции, так как в C# переменные объявляются только в одном месте:

Class MyClass {

 private static int MyStaticField = 6;

Конструкторы

Синтаксис объявления конструкторов в C# такой же, как синтаксис для встраиваемых конструкторов, заданных в определении класса в C++.

class MyClass {

 publiс MyClass {

// код конструктора

 }

Как и в C++, можно определить столько конструкторов, сколько потребуется, при условии, что они получают различное число или типы параметров. (Отметим, что, как и в методах, параметры по умолчанию не допускаются, необходимо моделировать это с помощью нескольких перезагружаемых версий.)

Для производных классов иерархии конструкторы действуют в C# по сути таким же образом, как и в C++. По умолчанию конструктор на вершине иерархии (это всегда

System.Object
) выполняется первым, за ним следуют конструкторы в порядке, определяемом деревом иерархии.

Статические конструкторы

C# допускает также концепцию статического конструктора, который выполняется только один раз и может использоваться для инициализации статических переменных. Концепция не имеет прямого эквивалента в C++.

  • Читать дальше
  • 1
  • ...
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: