C# для профессионалов. Том II
Шрифт:
Существует большое число других атрибутов, а также возможно задать свои собственные специальные атрибуты. Использование атрибутов рассматривается в главах 6 и 7.
Согласно синтаксису атрибуты указываются непосредственно перед объектом, к которому они применимы, в квадратных скобках. Это такой же синтаксис, как у атрибутов Microsoft C++.
Директивы препроцессора
C# поддерживает директивы препроцессора таким же образом, как C++, за исключением того, что их значительно меньше. В частности, C# не поддерживает обычно используемую директиву C++
Синтаксис директив препроцессора в C# такой же, как в C++. В C# поддерживаются следующие директивы:
Директива | Значение |
---|---|
#define/#undef | Так же как в C++, за исключением того, что они должны появиться в начале файла, до кода C#. |
#if/#elif/#else/#endif | То же самое, что в C++ #ifdef/#elif/#else/#endif . |
#line | То же самое, что в C++ #line . |
#warning/#error | То же самое, что в C++ #warning/#error . |
#region/#endregion | Помечает блок кода как область. Области распознаются некоторыми редакторами (такими, как редактор VisualStudio.NET) и поэтому могут использоваться для улучшения компоновки кода, представленного пользователю при редактировании. |
Пpиложение B
C# для разработчиков Java
В "Искусстве войны" Сунь Цзы утверждает, что "необходимо рассматривать вещи большой важности с небольшим усилием, а вещи небольшой важности с большим усилием". Это может звучать странно, но автор хочет, видимо, сказать, что если заботиться о незначительных вещах, то важные вещи тогда позаботятся о себе сами. Как это применимо к C# и Java?
При первом взгляде на код C# может показаться, что он не слишком впечатляющий, так как обнаруживается отчетливое сходство между ним и Java. Однако, если вы ожидали каких-то существенных изменений, то правда состоит в том, что на самом деле существует не так уж много синтаксических различий. Пути двух языков расходятся во внутренних тонкостях таких вещей, как перегрузка операторов, индексаторы, делегаты, свойства и перечисления с контролем типов. При более внимательном рассмотрении можно понять, что в конце концов между ними существует большое различие. (Приведенные выше темы будут подробнее рассмотрены позже в этом приложении.)
В этом приложении мы сосредоточимся прежде всего на вопросе, важном для разработчиков Java: как можно использовать в C# опыт использования Java, а также подчеркнем свойства присущие C#, и рассмотрим, что C# делать не может. Здесь предполагается, что читатель хорошо знаком с Java, поэтому отсутствует подробное описание языка Java, за исключением некоторых существующих различий.
Основы
Одно из основных различий между C# и Java лежит не в самом языке, а в платформе, поверх которой они реализованы. Программам Java требуется для выполнения кода рабочая среда времени выполнения Java Runtime Environment. C# и, на самом деле, вся платформа .NET выполняются в среде Common Language Runtime.
Большинство свойств CLR, внутреннее управление памятью, согласованность среды, масштабируемость и независимость от базовой платформы отражены в JRE Java. В то время, как JRE ограничена исключительно одним языком Java, CLR предоставляет поддержку и интеграцию нескольких языков с помощью VOS (virtual object system — система виртуальных объектов), которая предоставляет богатую типами систему, предназначенную для реализации множества различных типов языков программирования. Исходный код Java можно компилировать в промежуточное состояние, называемое байт-кодом. Он
Давайте рассмотрим известный пример "Hello, World!" на Java (который будет показан здесь без затенения):
Соответствующий код C# для этого примера следующий (представлен на сером фоне):
Прежде всего можно заметить, что эти два кода очень похожи, по большей части различия незначительны (такие, как использование заглавных букв в
Необходимо отметить тип
Можно заметить, что спецификатор ранга массива
Тот же самый код C# можно также представить следующим образом:
Как можно видеть, изменилось несколько элементов. Объявление