logo
Разработка dll-библиотеки

3.3 Возможности языка C#

Со стороны синтаксиса и возможностей языка, С# является как бы промежуточным вариантом между С++ и Visual Basic. Он унаследовал множество элементов из лучших языков на момент своего создания. Например, из языка С он имеет стиль синтаксиса для управляющих конструкций, блоков кода, описания сигнатуры методов и другие. С# делит с Java такие свойства, как отсутствие множественного наследования, отсутствие шаблонов, а также наличие сборщика мусора. Также в качестве заимствований языка C# можно записать ориентированность на создание компонент из Delphi. Но при всем этом C# имеет свой колорит.

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

Также одной из основных концепций является возможность рассмотрения любого типа данных, даже примитивных типа int, как объекты, что упрощает проблемы дизайна приложений. Это видно уже в реализации упаковки/распаковки.

В ключевые концепции языка включается не только простота создания программ, но и их поддержка. В связи с этим язык С# включает в себя возможность контроля версий и поддержку XML комментариев. Также для упрощения разработки, помимо автоматической уборщики мусора и безопасной работы с типами данных, в языке С# используется автоматическая инициализация переменных, при которой все типы, размещаемые в стеке, инициализируются нулями. Если объекты размещаются в куче и доступ к ним осуществляется по объектной ссылке, то эти ссылки инициализируются значением null, которая подразумевает указание ссылки на пустоту.

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

Событийная модель и обратные вызовы в C# представляют собой новую концепцию объектно-ориентированного типа ссылки на функцию. В языке он называется делегатом, и позволяет описывать события компонента без каких-либо возвратных интерфейсов и лишних усилий. Достаточным условием является лишь использование ключевого слова event.

Помимо всего прочего в языке используется парадигма программирования атрибутов. Эта парадигма подразумевает сохранение мета-информации вместе с типом в компиляторных модулях. Также язык позволяет получать и проводить операции над этой информацией. Особенно это полезно тем, что компилятор, или даже дизайнер, может получить информацию о компоненте, не запуская его.

Одновременно с этим, возможность подобной работы с атрибутами позволяет использовать статичные и динамические библиотеки COM, COM+ и DLL в программах, которые работают в среде .NET. Причем доступ к таким библиотекам достигается в одно небольшое выражение. Работу с перечисляемыми типами позволяет обезопасить использование перечислений.

Также язык позволяет использовать структуры как типы данных. Работа с такими типами происходит по значению. Помимо использования вложенных массивов, активно используемых в Java, имеется возможность работать с многомерными массивами. Это позволяет оптимизировать производительность разрабатываемых программ.