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

Ватсон Карли

Шрифт:

#include <iostream>

# include <Windows.h>

using namespace std;

int main(int argc, char *argv) {

 cout << "Goodbye, World!";

 MessageBox(NULL, "Goodbuy, World!", MB_OK);

 return 0;

}

А вот версия C#:

using System;

using System.Windows.Forms;

namespace Console1; {

 class Class1 {

static int Main(string[] args) {

Console.WriteLine("Hello, World!");

MessageBox.Show("Hello, World!");

return 0;

}

 }

}

Сравнение двух программ говорит, что синтаксис двух языков очень похож. В частности, блоки кода отмечены скобками

{}
, а точка с запятой используется в качестве ограничителя инструкций. Подобно C++, C# игнорирует все пробелы между инструкциями.

Мы разберем примеры строка за строкой, рассматривая предоставляемые свойства.

Инструкции #include

Версия C++ 'Hello World!' начинается с пары директив препроцессора для включения некоторых заголовочных файлов.

#include <iostream>

#include <Windows.h>

Они отсутствуют в версии C#, что иллюстрирует важный момент относительно того, как C# обращается к библиотекам. В C++ необходимо включать заголовочные файлы, чтобы компилятор смог распознать соответствующие символы в коде. Необходимо отдельно проинструктировать редактор связей для ссылки на библиотеки, что достигается с помощью параметров командной строки, передаваемых редактору. C# на самом деле не разделяет компиляцию и редактирование связей таким образом, как это делает C++. В C# все реализуется через параметры командной строки (и только тогда, когда происходит обращение к чему-то вне базовой библиотеки). Параметры позволят компилятору найти все определения классов, поэтому явные ссылки в исходном коде не нужны. Это в действительности значительно более простой способ, и после привыкания к модели C# версия C++, где все необходимо указывать дважды, начнет выглядеть достаточно странной и громоздкой.

Еще момент, который необходимо отметить, состоит в том, что из двух инструкций

#include
в приведенном выше коде C++, первая обращается к стандартной библиотеке ANSI (часть
iostream
стандартной библиотеки). Вторая к специальной библиотеке Windows и используется для того, чтобы можно было вывести окно сообщения. Код C++ под Windows часто должен обращаться к API Windows, так как стандарт ANSI не имеет никаких средств создания окон. В противоположность этому базовые классы .NET — эквивалент C# стандартной библиотеки шаблонов ANSI — включает средства создания окон, и здесь используются только базовые классы .NET. Код C# в данном случае не требует никаких нестандартных средств. (Хотя и спорная, эта точка зрения уравновешивается тем фактом, что 'стандарт' C# в настоящее время доступен только в Windows.)

Приведенный выше код C# оказался не содержащим никакой директивы

#include
, но это не значит, что любые препроцессорные директивы (даже и не
#include
) недоступны в C#, и не сохраняется синтаксис
#
.

Пространства имен

Программа C# Hello World начинается с объявления пространства имен, которое ограничивается фигурными скобками, чтобы включить всю программу. Пространства имен работают точно таким же образом в C#, как в C++, предоставляя способы удаления возможной неопределенности имен символов программе. Размещение элементов в пространстве имен необязательно в обоих языках, но в C# соглашение состоит в том, что все элементы должны быть в пространстве имен. Следовательно, в то время как вполне обычно видеть код C++, который не содержится в пространстве имен, крайне редко можно увидеть такой код в C#.

Следующая часть кода в версиях C# и C++ очень похожа, в обоих используется инструкция

using
для указания пространства имен, в котором должны искаться все символы. Единственное различие является синтаксическим: в C# применяется инструкция
namespace
, в то время как в C++ используется
using namespace
.

Многие разработчики C++ привыкли использовать старую библиотеку C++, что означает включения файла

iostream.h
, а не файла
iostream
, и в этом случае инструкция
using namespace std
является ненужной. Старая библиотека C++ официально опротестована и не будет больше поддерживаться версией Visual Studio 8 (версией, за которой последует Visual Studio.NET). Приведенный выше пример демонстрирует, как в действительности необходимо использовать библиотеку
iostream
в коде C++.

Точка входа: Main и main

Следующие элементы в примерах Hello World являются точками входа программ. В случае C++ это будет глобальная функция с именем

main
. C# делает примерно то же самое, хотя в C# именем является
Main
. Однако в то время как в C++ функция
main
определена вне любого класса, версия C# определена как статический член класса. Это связано с тем, что C# требует, чтобы все функции и переменные были членами класса или структуры C# не допускает никаких элементов верхнего уровня в программе, за исключением классов и структур. В этом отношении C# может рассматриваться как язык, обеспечивающий более строгое следование объектно-ориентированной практике, чем это делает C++. Существенное использование глобальных и статических переменных и функций в коде C++ считается в любом случае плохой практикой программирования.

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

Mаin
. Это может быть член любого класса в исходном коде, но только один класс должен иметь такой метод. (Если более одного класса определяем этот метод, необходимо использовать ключ компилятора, чтобы указать компилятору какой из них должен быть точкой входа программы.) Подобно своему эквиваленту в C++
Main
может возвращать либо
void
, либо
int
, хотя более распространено
int
. Также, подобно своему эквиваленту в C++,
Main
получает такой же эквивалент аргументов либо множество произвольных параметров командной строки, переданных в программу как массив строк, либо не получает никаких параметров. Но как можно видеть из кода, строки определены в C# более интуитивно понятным образом, чем в C++. Каждый массив хранит число элементов, которое он содержит, а также сами элементы, поэтому нет необходимости передавать отдельно число строк в массиве в коде C#, как делает C# с помощью параметра
argc
.

  • Читать дальше
  • 1
  • ...
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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