Язык программирования C#


Введение в C# Последнее время С и С++ являются наиболее используемыми языками для разработки коммерческих и бизнес приложений. Эти языки устраивают многих разработчиков, но в действительности не обеспечивают должной продуктивности разработки. К примеру, процесс написания приложения на С++ зачастую занимает значительно больше времени, чем разработка эквивалентного приложения, скажем, на Visual Basic.Сейчас существуют языки, увеличивающие продуктивность разработки за счет потери в гибкости, которая так привычна и необходима программистам на С/С++. Подобные решения являются весьма неудобными для разработчиков и зачастую предлагают значительно меньшие возможности. Эти языки также не ориентированы на взаимодействие с появляющимися сегодня системами и очень часто они не соответствуют существующей практике программирования для Web. Многие разработчики хотели бы использовать современный язык, который позволял бы писать, читать и сопровождать программы с простотой Visual Basic и в то же время давал мощь и гибкость C++, обеспечивал доступ ко всем функциональным возможностям системы, взаимодействовал бы с существующими программами и легко работал с возникающими Web стандартами. Учитывая все подобные пожелания, Microsoft разработала новый язык — C#. В него входит много полезных особенностей — простота, объектная ориентированность, типовая защищенность, «сборка мусора», поддержка совместимости версий и многое другое. Данные возможности позволяют быстро и легко разрабатывать приложения, особенно COM+ приложения и Web сервисы. При создании C#, его авторы учитывали достижения многих других языков программирования: C++, C, Java, SmallTalk, Delphi, Visual Basic и т.д. Надо заметить что по причине того, что C# разрабатывался с чистого листа, у его авторов была возможность (которой они явно воспользовались), оставить в прошлом все неудобные и неприятные особенности (существующие, как правило, для обратной совместимости), любого из предшествующих ему языков. В результате получился действительно простой, удобный и современный язык, по мощности не уступающий С++, но существенно повышающий продуктивность разработок. Web интеграция C# Ввиду очень удобного объектно-ориентированного дизайна, C# является хорошим выбором для быстрого конструирования различных компонентов — от высокоуровневой бизнес логики до системных приложений, использующих низкоуровневый код. Также следует отметить, что C# является и Web ориентированным — используя простые встроенные конструкции языка ваши компоненты могут быть легко превращены в Web сервисы, к которым можно будет обращаться из Internet посредством любого языка на любой операционной системе. Дополнительные возможности и преимущества перед другими языками приносит в C# использование передовых Web технологий, таких как: XML (Extensible Markup Language) и SOAP (Simple Object Access Protocol). Среда разработки Web сервисов позволяет программисту смотреть на существующие сегодня Web приложения, как на родные C# объекты, что дает возможность разработчикам соотнести имеющиеся Web сервисы с их познаниями в объектно-ориентированном программировании. Исключение ошибок C# Очень часто можно проследить такую связь — чем более язык защищен и устойчив к ошибкам, тем меньше производительность программ, написанных на нем. К примеру рассмотрим две крайности — очевидно это Assembler и Java. В первом случае можно добиться фантастической быстроты своей программы, но придется очень долго заставлять ее работать правильно на другом компьютере. В случае же с Java — получается защищенность, независимость от платформы, но, к сожалению, скорость этой программы вряд ли совместима со сложившимся представлением о скорости, например, какого-либо отдельного клиентского приложения (конечно существуют оговорки — JIT компиляция и прочее). Рассмотрим C++ с этой точки зрения — соотношение в скорости и защищенности близко к желаемому результату, но на основе опыта программирования можно с уверенностью сказать, что практически всегда лучше понести незначительную потерю в производительности программы и приобрести такую удобную особенность, как «сборка мусора», которая не только освобождает от утомительной обязанности управлять памятью вручную, но и помогает избежать многих потенциальных ошибок в вашем приложении. В действительности скоро «сборка мусора», да и любые другие шаги к устранению потенциальных ошибок станут отличительными чертами современного языка. В C#, как в несомненно современном языке, также существуют характерные особенности для обхода возможных ошибок. Например, помимо упомянутой выше «сборки мусора», там все переменные автоматически инициализируются средой и обладают типовой защищенностью, что позволяет избежать неопределенных ситуаций в случае, если программист забудет инициализировать переменную в объекте или попытается произвести недопустимое преобразование типов. Также в C# были предприняты меры для исключения ошибок при обновлении программного обеспечения. Изменение кода, в такой ситуации, может непредсказуемо изменить суть самой программы. Чтобы помочь разработчикам бороться с этой проблемой C# включает в себя поддержку совместимости версий (vesioning). В частности, в отличии от C++ и Java, если метод класса был изменен, это должно быть специально оговорено. Это позволяет обойти ошибки в коде и обеспечить гибкую совместимость версий. Также новой особенностью является native поддержка интерфейсов и наследования интерфейсов. Данные возможности позволяют разрабатывать сложные системы и развивать их со временем. Особенности C# В C# была унифицирована система типов, теперь разработчик может рассматривать каждый используемый тип как объект. Несмотря на то, используется класс, структура, массив или встроенный тип, разработчик может обращаться к нему как к объекту. Объекты собраны в пространства имен (namespaces), которые позволяют программно обращаться к чему-либо. Это значит что вместо списка включаемых файлов заголовков в своей программе нужно написать какие пространства имен, для доступа к объектам и классам внутри них, необходимо использовать. В C# выражение using позволяет не писать каждый раз название пространства имен, когда используется класс из него. Например, пространство имен System содержит несколько классов, в том числе и Console. И появляется возможность писать либо название пространства имен перед каждым обращением к классу, либо использовать using. Типовая защищенность C# Типовая защищенность способствует написанию устойчивых программ. К примеру, в C# все динамические объекты и массивы автоматически инициализируются нулем. Несмотря на то, что C# автоматически не инициализирует локальные переменные, компилятор выдаст предупреждение, если будет попытка использовать их до инициализации. Также, при обращению к массиву, выполняется проверка на выход за его границы. Таким образом в C#, в отличие от С++, невозможно изменить не отведенную для программы память. В C# нельзя создать ссылку на произвольную область памяти. Все приведения типов должны быть безопасными. К примеру, нельзя использовать приведение между reference (обращение по указателю на область памяти) и value (обращение к значению) типами. «Сбор мусора» обеспечит отсутствие в полученном коде болтающихся впустую ссылок. Типовая защищенность сильно связана с контролем на переполнение. Не допускаются арифметические операции, которые будут переполнять допустимое значение переменной или объекта. Хотя, конечно, существует лишь неполный набор факторов, которые говорят о явном переполнении переменной. Если же разработчику не нравится такая проверка – он может ее отменить. Вообще, типы данных, присутствующие в C#, отличаются от типов в C++. Так тип char тут 16-битный, а весьма полезные типы string и decimal являются встроенными. Но куда большие отличия можно увидеть при рассмотрении массивов. В C# могут быть многомерные массивы (multidimentional) и неровные (или неуточненные — jagged — массивы массивов). Удобство и современность C# Хотелось бы подчеркнуть современное удобство C#. Когда разработчик начнет работу с C#, то довольно большое значение в нем имеют пространства имен — ведь все файлы заголовков заменены именно пространством имен. Так в C#, помимо просто выражения using, предоставляется еще одна очень удобная возможность — использование дополнительного имени (alias) пространства имен или класса. Современность C# проявляется и в новых шагах к облегчению процесса отладки программы. Традиционым средством для отладки программ на стадии разработки в C++ является маркировка обширных частей кода директивами #ifdef и т.д. В C#, используя атрибуты, ориентированные на условные слова, вы можете куда быстрее писать отлаживаемый код. В наше время, когда усиливается связь между миром коммерции и миром разработки программного обеспечения, и корпорации тратят много усилий на планирование бизнеса, ощущается необходимость в соответствии абстрактных бизнес процессов их программным реализациям. К сожалению, большинство языков реально не имеют прямого пути для связи бизнес логики и кода. Например, сегодня многие программисты комментируют свои программы для объяснения того, какие классы реализуют какой-либо абстрактный бизнес объект. C# позволяет использовать типизированные, расширяемые метаданные, которые могут быть прикреплены к объекту. Архитектурой проекта могут определяться локальные атрибуты, которые будут связанны с любыми элементами языка — классами, интерфейсами и т.д. Разработчик может программно проверить атрибуты какого-либо элемента. Это существенно упрощает работу, к примеру, вместо того чтобы писать автоматизированный инструмент, который будет проверять каждый класс или интерфейс, на то, является ли он действительно частью абстрактного бизнесс объекта, можно просто воспользоваться сообщениями основанными на определенных в объекте локальных аттрибутах. Дополнительные возможности C# Реальный опыт разработки говорит о том, что некоторым программам и по сей день требуется native код, либо из соображений производительности, либо для взаимодействия с существующими API. Эта причина может заставить разработчиков использовать С++ даже когда они предпочли бы более продуктивную среду разработки. В С# для решения этой проблемы были приняты несколько решений: включена native поддержка COM-технологии и WinAPI, допускается ограниченно использовать native указатели. Разработчику больше не нужно точно реализовывать IUnknown и другие COM интерфейсы. Теперь эти особенности являются встроенными. Также C# программы могут органично использовать существующие COM объекты независимо от того, на каком языке они были написаны. Для тех разработчиков которым это необходимо, в C# была включена специальная особенность, которая позволяет программе обращаться к любому существующему native API. Внутри специально помеченного блока (unsafe) программисту позволяется использовать указатели и традиционные особенности С/С++, такие как, управление памятью вручную и арифметика указателей. Этот большой плюс отличает C# от других сред разработки. Вместо того, чтобы отказаться от уже существующего С/С++ кода, вы можете разрабатывать C# приложения, используя его.

Загрузка...