C Sharp
Материал из Википедии — свободной энциклопедии
- Правильный заголовок этой статьи — C#. Он показан некорректно из-за технических ограничений.
C# (произносится си-шарп) — язык программирования, сочетающий объектно-ориентированные и аспектно-ориентированные концепции. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств, вроде Visual Studio.
C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к С++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков С++, Java, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++).
Содержание |
[править] Особенности языка
C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает FCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем. (Однако эта закономерность была нарушена с выходом C# 3.0, представляющим собой расширения языка, не опирающиеся на расширения платформы .NET.) CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J# и др.
[править] Название языка
Символ '#' (октоторп) в названии языка можно интерпретировать и как две пары плюсов ++;++, намекающие на новый шаг в развитии языка по сравнению с C++ (подобно шагу от C к C++), и как музыкальный символ диез, вместе с буквой C составляющий в английском языке название ноты до-диез (англ. C sharp). Октоторп '#' часто называют «шарпом» (от англ. sharp) из-за его схожести с диезом '♯', отсюда и название языка — «Си шарп».
[править] Стандартизация
Первая версия C# стандартизирована в ECMA (Standard ECMA-334 C# Language Specification, 3rd edition (June 2005)) и ISO (ISO/IEC 23270:2003, Information technology — C# Language Specification). Базируясь на этой спецификации, известно, как минимум, о двух независимых реализациях C#, находящихся в настоящее время на различных стадиях разработки
- Mono, начата компанией Ximian и продолжена её покупателем и преемником Novell.
- dotGNU и Portable.NET, разрабатываемые Free Software Foundation
В конце 2005 года Microsoft объявила о планах предать публичной спецификации вторую версию C#, но к настоящему времени эта спецификация ещё не получила статус международного стандарта. Существующее положение ставит, таким образом, Microsoft в роль едва ли не единственной рыночной силы, развивающей C#.
[править] Версии
[править] Версия 1.0
Проект C# был начат в декабре 1998 и получил кодовое название COOL (C-style Object Oriented Language). Версия 1.0 была анонсирована вместе с платформой .NET в июне 2000 года, тогда же появилась и первая общедоступная бета-версия; C# 1.0 окончательно вышел вместе с Microsoft Visual Studio .NET в феврале 2002 года.
Первая версия C# напоминала по своим возможностям Java 1.4, несколько их расширяя: так, в C# имелись свойства (выглядящие в коде как поля объекта, но на деле вызывающие при обращении к ним методы класса), индексаторы (подобные свойствам, но принимающие параметр как индекс массива), события, делегаты, циклы foreach, структуры, передаваемые по значению, автоматическое преобразование встроенных типов в объекты при необходимости (boxing), атрибуты, встроенные средства взаимодействия с неуправляемым кодом (DLL, COM) и прочее.
Кроме того, в C# решено было перенести некоторые возможности C++, отсутствовавшие в Java: беззнаковые типы, переопределение операций (с некоторыми ограничениями, в отличие от C++), передача параметров в метод по ссылке, методы с переменным числом параметров, оператор goto. Также в C# оставили ограниченную возможность работы с указателями — в местах кода, специально обозначенных словом unsafe и при указании специальной опции компилятору.
[править] Версия 2.0
Проект спецификации C# 2.0 впервые был выложен Microsoft в октябре 2003 года; в 2004 году выходили бета-версии (проект с кодовым названием Whidbey), C# 2.0 окончательно вышел 7 ноября 2005 года вместе с Visual Studio 2005 и .NET 2.0.
Новые возможности в версии 2.0
- Частичные типы (разделение реализации класса более чем на один файл).
- Обобщённые, или параметризованные типы (generics). В отличие от шаблонов C++, они поддерживают некоторые дополнительные возможности и работают на уровне виртуальной машины. Вместе с тем, параметрами обобщенного типа не могут быть выражения, они не могут быть полностью или частично специализированы, не поддерживают шаблонных параметров по умолчанию, от шаблонного параметра нельзя наследоваться, и т.д[1].
- Новая форма итератора, позволяющая создавать сопрограммы с помощью ключевого слова
yield, подобно Python'у и Руби. - Анонимные методы, обеспечивающие функциональность замыкания.
- Оператор '??':
return obj1 ?? obj2;означает (в нотации C# 1.0)return obj1!=null ? obj1 : obj2;. - Обнуляемые ('nullable') типы-значения (обозначаемые вопросительным знаком, например,
int? i = null;), представляющие собой те же самые типы-значения, только могущие принимать также значениеnull. Такие типы позволяют улучшить взаимодействие с базами данных через язык SQL.
[править] Версия 3.0
В июне 2004 года Андерс Хейлсберг впервые рассказал на сайте Microsoft о планируемых расширениях языка в C#3.0.[2] В сентябре 2005 года вышли проект спецификации C# 3.0 и бета-версия C# 3.0, устанавливаемая в виде дополнения к существующим Visual Studio 2005 и .NET 2.0.
Новые возможности в версии 3.0
В C# 3.0 появились следующие радикальные добавления к языку:
- ключевые слова
select, from, where, позволяющие делать запросы из SQL, XML, коллекций и т. п. (запрос, интегрированный в язык, Language Integrated Query, или LINQ) - Инициализация объекта вместе с его свойствами:
Customer c = new Customer(); c.Name = "James";- превратится в
Customer c = new Customer { Name = "James" };
listOfFoo.Where(delegate(Foo x) { return x.size > 10; });- превратится в
listOfFoo.Where(x => x.size > 10);
- Вывод типов локальной переменной:
var x = "hello";вместоstring x = "hello"; - Безымянные типы:
var x = new { Name = "James" }; - Методы-расширения — добавление метода в существующий класс с помощью ключевого слова
thisпри первом параметре статической функции.
public static class StringExtensions { public static int ToInt32(this string val) { return Int32.Parse(val); } } // ... string x = 10; int y = x.ToInt32();
- Автоматические свойства: Компилятор сгенерирует закрытое (private) поле и соответствующие аксессор и мутатор для такого кода вида
public string Name { get; private set; }
C# 3.0 совместим с C# 2.0 по генерируемому MSIL-коду; улучшения в языке — чисто синтаксические и реализуются на этапе компиляции. Например, многие из интегрированных запросов LINQ можно осуществить, используя безымянные делегаты в сочетании с предикатными методами над контейнерами вроде List.FindAll и List.RemoveAll.
[править] Версия 4.0
Превью C# 4.0 было представлено в конце 2008 года, вместе с CTP-версией Visual Studio 2010. Предполагается, что Visual Basic 10.0 и C# 4.0 будут выпущены в конце 2009 года, одновременно с выпуском Visual Studio 2010. [3]
Новые возможности в версии 4.0 [4]
- Возможность использования позднего связывания, для использования:
- с языками с динамической типизацией (Python, Ruby)
- с COM-объектами
- отражения (reflection)
- объектов с изменяемой структурой (DOM). Появляется ключевое слово dynamic.
- Именованные и опциональные параметры
- Новые возможности COM interop
- Вариантность
Примеры:
dynamic calc = GetCalculator(); int sum = calc.Add(10, 20); // Динамический вызов
public void SomeMethod(int x, int y = 5, int z = 7); // Опциональные параметры
[править] Пример «Hello, World»
class Example { static void Main() { System.Console.WriteLine("Hello, World!"); } }
[править] Реализации
Существует несколько реализаций C#:
- Реализация C# в виде компилятора csc.exe включена в состав .NET Framework.
- В составе проекта Rotor (Shared Source Common Language Infrastructure) компании Microsoft
- Проект Mono включает в себя реализацию C# с открытым исходным кодом
- Проект DotGNU также включает компилятор C# с открытым кодом
- DotNetAnywhere — [1] - ориентированная на Embedded-системы реализация CLR, поддерживает практически всю спецификацию C# 2.0
[править] Примечания
- ↑ Differences Between C++ Templates and C# Generics (C# Programming Guide)
- ↑ MSDN News
- ↑ Microsoft converging programming languages — новость от 27 февраля 2009 г.
- ↑ C# Future
[править] См. также
- Сравнение C# и Java
- Сравнение возможностей C# с другими языками см. в статье Сравнение языков программирования
- System.Object
[править] Ссылки
- Язык C#
- Руководство по программированию в C#
- ISO C# Language Specification(англ.)
- ECMA-334PDF (5,59 Мб) — спецификация языка C# 2.0(англ.)
- C# Language Specification Version 3.0 — спецификация C# 3.0(англ.)
- Язык программирования Си#: критическая оценка
[править] Литература
- Кристиан Нейгел, Билл Ивьен, Джей Глинн, Карли Уотсон, Морган Скиннер C# 2008 и платформа .NET 3.5 для профессионалов = Professional C# 2008. — М.: «Диалектика», 2008. — ISBN 978-5-8459-1458-3
- Кристиан Нейгел, Билл Ивьен, Джей Глинн, Карли Уотсон, Морган Скиннер C# 2005 и платформа .NET 3.0 для профессионалов = Professional C# 2005 with .NET 3.0. — М.: «Диалектика», 2007. — ISBN 978-5-8459-1317-3
- Эндрю Троелсен Язык программирования C# 2005 (Си Шарп) и платформа .NET 2.0 = Pro C# 2005 and the .NET 2.0 Platform. — 3-е изд. — М.: «Вильямс», 2007. — С. 1168. — ISBN 1-59059-419-3
|
|
|
|---|---|
| Используемые в разработке |
Ада • АПЛ • Ассемблеры • ActionScript • ABAP/4 • AutoIt • Awk • BASIC • C • Кобол • C++ • C# • ColdFusion • D • Delphi • Erlang • Eiffel • Forth • FoxPro • Gambas • DataFlex • Фортран • Groovy • Haskell • Java • JavaScript • J++ • J# • Icon • Limbo • Лисп • Lua • MATLAB • Object Pascal • Objective-C • Оберон • PowerBASIC • Parser • Паскаль • Perl • PHP • PureBasic • Python • PL/I • Пролог • Ruby • Tcl • Scheme • Smalltalk • SQL • Vala • Visual DataFlex • Visual Basic • VB.NET |
| Академические | |
| IEC61131-3 |
Instruction List • ST • FBD • Ladder Diagram • SFC |
| Прочие | |
| Эзотерические | |
| Cписок всех языков | |
|
|
|
|---|---|
| ANSI escape code · C++/CLI · C# · CD-ROM · CLI · DDS · E4X · ECMAScript · Eiffel · FAT · FD · HVD · Office Open XML · U3D · UDF · UMD |

