Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

Существует большое число других атрибутов, а также возможно задать свои собственные специальные атрибуты. Использование атрибутов рассматривается в главах 6 и 7.

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

[Conditional("Debug")]

void DisplayValuesOfImportantVariables {

 // и т.д.

Директивы препроцессора

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

#include
. (Она
не требуется, так как в 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 можно компилировать в промежуточное состояние, называемое байт-кодом. Он

может затем выполняться с помощью поставляемой виртуальной машины. CLR, наоборот, не предоставляет виртуальную машину. Код C# также компилируется в промежуточное состояние, называемое для удобства промежуточным языком (IL, Intermediate Language). Но код IL передается в управляемые CLR процессы выполнения или компиляторам JIT CLR, обычно называемым JITters, которые преобразуют по требованию разделы IL в собственный код.

Давайте рассмотрим известный пример "Hello, World!" на Java (который будет показан здесь без затенения): 

public class Hello {

 public static void main(String args[]) {

System.out.println("Hello world! This is Java Code!");

 }

}

Соответствующий код C# для этого примера следующий (представлен на сером фоне):

public class Hello {

 public static void Main(string[] args) {

System.Console.WriteLine("Hello world! This is C# code!");

 }

}

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

string
и
Main
и использование
System.Console.WriteLine
вместо
System.out.println
). Он является, с другой стороны, по-прежнему зависимым от регистра символов.

Необходимо отметить тип

string
, который в C# также может записываться с заглавной S — как
String
. Следовательно, приведенный выше код можно записать в следующем виде:

public class Hello {

 public static void Main(String [] args) {

System.Console.WriteLine("Hello world! This is C# code!");

 }

}

Можно заметить, что спецификатор ранга массива

[]
перемещен из позиции перед переменной
args
в примере Java в положение между типом
string
и переменной
args
в примере C#. В C# спецификатор ранга массива должен появляться перед именем переменной, так как массив является на самом деле типом данных, что указывается с помощью
[]
:

// C#

int [] X; // массив целых чисел в C#

// пример java

int [] х; // массив целых чисел в java

int x[]; // массив целых чисел в java

Тот же самый код C# можно также представить следующим образом:

using System;

class Hello {

 public static int Main {

Console.WriteLine ("Hello world! This is C# code!");

return 0;

 }

}

Как можно видеть, изменилось несколько элементов. Объявление

string [] args
в сигнатуре метода является в C# необязательным (хотя скобки должны стоять перед именем параметра), как и использование public при объявлении метода. Ключевое слово
using
аналогично по смыслу ключевому слову
include
в Java, и так как
System
является используемым по умолчанию включением в C#, первая строка позволяет нам опустить
System
, которое находилось перед
Console.WriteLine
. Поскольку мы используем в этом примере
int
вместо
void
, необходимо включить строку
return 0;
.

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

Вамп

Парсиев Дмитрий
3. История одного эволюционера
Фантастика:
рпг
городское фэнтези
постапокалипсис
5.00
рейтинг книги
Вамп

Не грози Дубровскому! Том II

Панарин Антон
2. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том II

Купец III ранга

Вяч Павел
3. Купец
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Купец III ранга

Газлайтер. Том 1

Володин Григорий
1. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 1

Хозяйка старой усадьбы

Скор Элен
Любовные романы:
любовно-фантастические романы
8.07
рейтинг книги
Хозяйка старой усадьбы

Сумеречный Стрелок 10

Карелин Сергей Витальевич
10. Сумеречный стрелок
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Сумеречный Стрелок 10

Законы Рода. Том 7

Flow Ascold
7. Граф Берестьев
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Законы Рода. Том 7

Боярышня Дуняша 2

Меллер Юлия Викторовна
2. Боярышня
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Боярышня Дуняша 2

Пятнадцать ножевых 3

Вязовский Алексей
3. 15 ножевых
Фантастика:
попаданцы
альтернативная история
7.71
рейтинг книги
Пятнадцать ножевых 3

Секретарша генерального

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
8.46
рейтинг книги
Секретарша генерального

Вперед в прошлое 2

Ратманов Денис
2. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 2

Облачный полк

Эдуард Веркин
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Облачный полк

Бастард Императора. Том 6

Орлов Андрей Юрьевич
6. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 6

Ученичество. Книга 2

Понарошку Евгений
2. Государственный маг
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ученичество. Книга 2