Лекции от Савостьянока Ю.А.

С#

C# - объектно-ориентированный язык программирования, произошедший от С, обладающий некоторыми свойствами С++, Java и Visual Basic. C# был разработан Microsoft, изначально как часть проекта .Net. Microsoft утверждает, C# обладает мощностью и широкими возможностями C++ и эффективностью Visual Basic.

Как С-подобный язык C# предлагает привычный комплект примитивных типов: целые, действительные, булевы и символьные значения. Он так же поддерживает объекты и массивы. Непохожий на Java и C++, C# скрывает различие между примитивными типами и объектами автоматически преобразую примитивные типы в объекты и наоборот. C# является строго типизированным языком и предоставляет широкую compile-time и run-time проверку; непохожий на Java, C# поддерживает использование как и в C небезопасных указателей, но только в пределах специально выделенной памяти. C# поддерживает тип string как объект, поэтому он тесно интегрирован в семантику языка (совсем как в Java).

C# не поддерживает множественное наследование, но поддерживает перегрузку операторов, переопределение методов, рефлекцию и полиморфизм. Поскольку C# задумывался в основном для продолжения развития операционной системы Windows, объектная модель C# соответствует объектной модели Microsoft's COM/DCOM. C# также поддерживает интересный механизм, так называемые свойства, с помощью которых кодировщик может делать доступными методы объектов, одновременно позволяя другим программистам обращаться к этим методам как к обычным атрибутам (полям) объекта, этот механизм напоминает CORBA IDL и язык Self. Другими возможностями, поддерживаемыми C#, являются структуры, индексаторы, перегрузка операторов и контроль передаваемых параметров.

Для исполнения программ, написанных на C# необходима установленная на компьютере система исполнения  Microsoft's Common Language Runtime (CLR), поставляемая вместе с богатыми библиотеками разнообразных структур данных, средствами ввода-вывода,  поддержкой сетевых протоколов, web-служб. Эти библиотеки обеспечивают поддержку низкоуровневого взаимодействия с ОС, COM, ActiveX и многое другое. C# полностью поддерживает обработку исключений (exception handling).

C# предоставляет механизмы автоматической сборки мусора (garbage collection) и автоматическое управление памятью.

Для генерации кода для обработки GUI-событий и других внешних событий в C# предлагается новую модель делегирования (delegation). Это, вероятно, самое сложное свойство языка, не имеющее аналогов в C++ или Java (хотя в Objective-C существует нечто подобное.)

Другим новшеством C# является возможность определения атрибутов, которая в действительности является частью Common Language Runtime. Атрибутами являются метаданные, содержащие информацию о программном коде и связях между участками кода, передаваемые программистом компилятору и системе исполнения. В C такие вещи часто выполняются с помощью директив компилятора (pragmas) и нестандартными ключевыми словами; в Java, используются специальные интерфейсы. Атрибуты гораздо богаче, чем аналогичные возможности в других сравниваемых языках. Они также добавляют усложняющий аспект языку, в котором многие разработчики не нуждаются. К счастью, возможно написание многих программ на C# не прибегая к использованию атрибутов вовсе.

На данный момент полная реализация C# предоставляется только в компиляторах платформы .Net фирмы Microsof. Microsoft сделала доступным бесплатную версию компилятора с необычным названием  ".Net Framework SDK". На данный момент также разрабатываются другие реализации этого языка.

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

Язык C# тесно связан с Microsoft Common Language Runtime (CLR). Для CLR, программный код скомпилирован в промежуточный язык IL (intermediate language) и IL код хранится в самоописывающихся двоичных сборках. Абстрактно эти сборки можно рассматривать как хранилища кода (архивы). В тоже время они являются исполняемыми файлами формата Microsoft PE. Как именно исполняется IL код это скрыто за реализацией среды выполнения (разработческой); в среде Microsoft IL код транслируется в машинный код процессора Intel.

C# поддерживает мультипоточность, хотя интеграция потоков (нитей) и их синхронизация в C# не так элегантна как в Java.

Hosted by uCoz