Введение.
Вместе с выпуском новой платформы .NET
компания Microsoft представила новый язык, идеально подходящий для новой
платформы - C# (читается "си шарп"). Станет ли он для Вас любимым и
единственным или одним из постоянно используемых решать Вам, так как .NET
дает такую возможность. Но на мой взгляд любой .NET программист должен
знать C#, как язык специально созданный для работы с этой платформы.
Тем более, что в нем многие найдут любимые
черты. Он близок и Delphi, и C++, и Java программистам.
Данная статья не научит Вас программировать
на этом современном языке. Моя цель дать Вам представления о
возможностях языка, его преимуществах и области применимости, то есть
основополагающий базис, который позволит заняться изучением
синтаксических особенностей.
Публикация рассчитана на инженеров, знакомых
с основными понятиями современных.
Основные характеристики языка.
Программиста, привыкший к платформе
Майкрософт, может представить себе C# как промежуточный вариант между
C++ и Visual Basic, если рассматривать сложность языковых конструкций и
возможности языка.
C# имеет C стиль синтаксиса (для управляющих
конструкций, блоков кода, описания сигнатуры методов и др.), много
общего с Java (отсутствие множественного наследования и шаблонов,
наличие сборщика мусора) и Дельфи (ориентированность на создание
компонент), в то же время имеет и свой колорит.
При создании языка в основу дизайна легла
легкость использования, доминирующая над мощностью языка и скоростью
выполнения. Отсюда и сборщик мусора с управляемыми объектными ссылками,
который автоматически освобождает за Вас память, отбирая при этом
процессорное время. Вы также получаете безопасность работы с типами, а
это по мнению многих является вторым важнейшим фактором избежания
ошибок.
C# объектно-ориентированный язык, как и вся
платформа .NET. Более того, это язык, ориентированный на написание
компонент. C# создан для программирования в управляемой среде с
присутствующим сборщиком мусора, но позволяет писать и неуправляемый
(unmanaged) код.
Цельность концепции видна, скажем в
реализации упаковки/распаковки. Это позволяет рассматривать все типы
(даже примитивные) как объекты, что разрешает многие проблемы дизайна
приложений.
При создании языка рассматривалась не только
простота написания приложений, но и их поддержки - в связи с чем в язык
включили поддержку XML комментариев и контроля версий. Настоящий подарок
для программистов.
Помимо сборщика мусора и безопасности работы
с типами для избежания ошибок в языке также применяется автоматическая
инициализация переменных. Все типы, которые размещаются в стеке (value
types, к которым относятся примитивные типы, структуры и прочие
наследники класса ValueType) инициализируются нулями. Объекты остальных
типов размещаются в куче, доступ к ним осуществляется по объектной
ссылке, и ссылки эти инициализируются в значение null (которая говорит,
что данная ссылка не имеет ассоциированного объекта в куче).
В C# представлена концепция пространств имен,
аналогичная пакетам в Java. Это позволяет иерархически структурировать
Вашу систему типов, делая код намного более понятным и позволяя избежать
проблем с именованием. Вы можете рассматривать пространства имен как
директории, а языковые типы как файлы в этих директориях.
Приятности.
Коротко упомянем про некоторые из
возможностей работы с языком. Подробнее с синтаксисом и примерами
использования этих возможностей Вы можете ознакомиться на сайте
www.dotsite.spb.ru .
В языке для работы с событиями и обратными
вызовами представлена новая концепция объектно-ориентированно и
безопасной с точки зрения системы типов ссылки на функцию - "делегат".
Именно эта концепция позволяет описывать события C# компонента без
возвратных интерфейсов и дополнительных усилий, достаточно использовать
ключевое слово event.
Индексаторы и свойства органично дополняют
события до создания описываемого сигнатурой компонента.
C# позволяет использовать при разработке
парадигму атрибутивного программирования, когда в компиляционных модулях
вместе с типом может сохраняться мета-информация. Данная информация
впоследствии может быть получена и использована во время выполнения.
Более того, этой информацией может воспользоваться компилятор или,
скажем, дизайнер, что позволяет, не запуская компонент, получать
информацию о нем.
Работа с атрибутам позволяет использовать
COM, COM+ и DLL в C# приложениях, работающих в среде .NET. Перечисления
позволяют обезопасить работу с перечисляемыми типами.
Реализация структур как типов, работа с
которыми идет по значению, вкупе с возможностью использовать не только
вложенные массивы (как в Java), но и многомерные позволяет
оптимизировать производительность приложений.
Выбор.
При написании стандартных приложений под .NET трудно подобрать более
подходящий язык, если Вы привыкли к синтаксису C-подобных языков.
Если Вы хотите использовать шаблоны
(templates, полиморфные типы), то сейчас Вам придется обратиться к C++.
С другой стороны, шаблоны скорее всего будут реализованы во второй
версии общеязыковой среды выполнения и C#.
Если Вы не хотите отказываться от
возможностей использования множественного наследования, то Вам стоит
обратить внимание на Eiffel#.
Если Вы привыкли к синтаксису и простоте
бейсика, Ваш выбор наверняка падет на Visual Basic.NET.
В любом случае стоит принять во внимание, что
базовым языков одной из основных современных платформ разработки
является именно C#, а это имеет отражение и на продуктах для
разработчиков, которых для C# скорее всего будет больше чем для
остальных языков, работающих под .NET.
Заключение.
Я постарался сделать эту статью как можно
короче, чтобы люди, имеющие минимальный запас времени могли получить
представление о C#. Для дальнейшего знакомства с языком, рекомендуем
публикации на www.dotsite.spb.ru, а затем и спецификацию языка.
Если возникли вопросы, пишите в форумы на
сайте www.dotsite.spb.ru
С уважением, Андрей Филёв.
Microsoft Certified Solution Developer
Об авторе:
Андрей Филёв является ведущим
консультантом созданной им компании dotSITE Ltd.Co., работает с .NET и
C# почти два года.