Язык с#.
C Sharp
Материал из Википедии — свободной энциклопедии
У этого термина существуют и другие значения, см. C.
Правильный заголовок этой статьи — C#. Он показан некорректно из-за технических ограничений.
C#Семантика:
императивный
Класс языка:
мультипарадигменный:
объектно-ориентированное, обобщённое, процедурное программирование
Появился в:
2001 г.
Автор(ы):
Андерс Хейлсберг
Релиз:
4.0 (12 апреля 2010)
Типизация данных:
строгая
Испытал влияние:
C++, Java[1][2][3], Delphi, Модула и Smalltalk
Повлиял на:
F#, Nemerle, Vala, Windows PowerShell
C# (произносится си-шарп) — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств, вроде Visual Studio.
C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.
Переняв многое от своих предшественников — языков C++, Java, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++).Содержание Особенности языка
C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем. (Однако эта закономерность была нарушена с выходом C# 3.0, представляющим собой расширения языка, не опирающиеся на расширения платформы .NET.) CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J# и др.
Название языка
Нота до-диез
Символ # (октоторп) печатается на клавиатуре как Shift+3, что символизирует третью реализацию C. С другой стороны # в названии языка можно интерпретировать и как две пары плюсов ++;++, намекающие на новый шаг в развитии языка по сравнению с C++ (подобно шагу от C к C++), и как музыкальный символ диез, вместе с буквой C составляющий в английском языке название ноты до-диез (англ. C sharp). Октоторп # часто называют «шарпом» (от англ. sharp) из-за его схожести с диезом ♯, отсюда и название языка — «Си шарп». Также «sharp» переводится с английского как «острый», «отточенный».
Стандартизация
C# стандартизирован в ECMA (ECMA-334)[4] и ISO (ISO/IEC 23270)[5].
Известно, как минимум, о трёх независимых реализациях C#, базирующихся на этой спецификации и находящихся в настоящее время на различных стадиях разработки:
Mono, начата компанией Ximian и продолжена её покупателем и преемником Novell.
dotGNU и Portable.NET, разрабатываемые Free Software Foundation.
Версии
Версия 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++, они поддерживают некоторые дополнительные возможности и работают на уровне виртуальной машины. Вместе с тем, параметрами обобщённого типа не могут быть выражения, они не могут быть полностью или частично специализированы, не поддерживают шаблонных параметров по умолчанию, от шаблонного параметра нельзя наследоваться, и т. д.[8]
Новая форма итератора, позволяющая создавать сопрограммы с помощью ключевого слова yield, подобно Python и Ruby.
Анонимные методы, обеспечивающие функциональность замыкания.
Оператор '??': return obj1 ?? obj2; означает (в нотации C# 1.0) return obj1!=null ? obj1 : obj2;.
Обнуляемые ('nullable') типы-значения (обозначаемые вопросительным знаком, например, int? i = null;), представляющие собой те же самые типы-значения, способные принимать также значение null. Такие типы позволяют улучшить взаимодействие с базами данных через язык SQL.
Возможность создавать хранимые процедуры, триггеры и даже типы данных на .Net языках (в том числе и на C#).
Поддержка 64-разрядных вычислений, что кроме всего прочего, позволяет увеличить адресное пространство и использовать 64-разрядные примитивные типы данных.
Версия 3.0
В июне 2004 года Андерс Хейлсберг впервые рассказал на сайте Microsoft о планируемых расширениях языка в C#3.0.[9] В сентябре 2005 года вышли проект спецификации C# 3.0 и бета-версия C# 3.0, устанавливаемая в виде дополнения к существующим Visual Studio 2005 и .NET 2.0. Окончательно эта версия языка вошла в Visual Studio 2008 и .NET 3.5.
Новые возможности в версии 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);
Деревья выражений:
лямбда-выражения теперь могут представляться в виде структуры данных, доступной для обхода во время выполнения, тем самым позволяя транслировать строго типизированные C#-выражения в другие домены (например, выражения SQL).
Вывод типов локальной переменной: 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 s = "10";
int x = s.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 были выпущены в апреле 2010 года, одновременно с выпуском Visual Studio 2010.
Новые возможности в версии 4.0[10]
Возможность использования позднего связывания, для использования:
с языками с динамической типизацией (Python, Ruby)
с COM-объектами
отражения (reflection)
объектов с изменяемой структурой (DOM). Появляется ключевое слово dynamic.
Именованные и опциональные параметры
Новые возможности COM interop
Ковариантность и контрвариантность
Контракты в коде (Code Contracts)
Примеры:
dynamic calc = GetCalculator();
int sum = calc.Add(10, 20); // Динамический вызов
public void SomeMethod(int x, int y = 5, int z = 7); // Опциональные параметры
[править]
Пример «Hello, World!»
Ниже представлен код классической программы «Hello world» на C#:
using System;
namespace Example
{
class Program
{
static void Main()
{
Console.WriteLine("Hello, World!");
}
}
}
Реализации
Существует несколько реализаций C#:
Реализация C# в виде компилятора csc.exe включена в состав .NET Framework.
В составе проекта Rotor (Shared Source Common Language Infrastructure) компании Microsoft.
Проект Mono включает в себя реализацию C# с открытым исходным кодом.
Проект DotGNU также включает компилятор C# с открытым кодом.
DotNetAnywhere[11] — ориентированная на Embedded-системы реализация CLR, поддерживает практически всю спецификацию C# 2.0.
- Часть 1.2. Basic(Знакомство с информационной технологией) 186
- Часть 1.3. Html (Знакомство с информационной технологией). Примечание: Подробно будут изучать (некоторые специальности) в рамках курса языки разметки web-страниц 198
- Часть 1.4. С-подобные языки(Знакомство с информационной технологией) 204
- Конспект лекций
- Часть 1: Современные информационные технологии (по и оборудовние)
- Вопрос 01. Информация и информатизация.
- Вопрос 02. Устройства хранения информации.
- Вопрос 06. Базы данных. Субд.
- Вопрос 07. Acses
- Вопрос 08. Передача данных.
- Вопрос 09. Сетевые информационные технологии
- Вопрос 10. Интернет. Сервисы, услуги и информационные ресурсы Интернета
- Вопрос 11. Защита информации
- Вопрос 12: Архитектура и структура пк. Назначение составных элементово пк. Сборка пк.
- Часть 2: Разработка информационных технологий. Применение информационных технологий преданазначенных для разработки информационных технологий.
- Вопрос 13. Переменные, объявление переменных, константы, массивы в языке Паскаль.
- Вопрос 14. Условный оператор (If) и оператор выбора (case) в языке Паскаль
- Вопрос 15. Циклы в языке Паскаль
- Вопрос 16. Объявление и использование своих функций и процедур в языке Паскаль
- Вопрос 17. Встроенные функции в языке Паскаль
- Вопрос 23. Понятие класса. Объявление класса.
- Вопрос 25. Среда Delphi и особенности языка
- Вопрос 28. Основные языковые структуры и применение html.
- Вопрос 29. JavaScript.
- 1. Оператор for
- 2. Оператор while
- 3. Оператор do…while
- 4. Метки операторов
- 5. Оператор break
- 6. Оператор continue
- 5. Оператор for…in
- 6. Оператор with
- Вопрос 30. Php.
- Вопрос 31. Жизненный цикл информационных технологий
- Часть 3: Концептуальные информационные технологии
- Вопрос 32: Технология com
- Вопрос 33: Технология Java. Java virtual mashin. Особенности и области применения языка Java.
- Технология Java
- Язык программирования Java
- Вопрос 34: Технология .Net. Особенности языка и области применения языка с#.
- Технология .Net.
- Язык с#.
- Вопрос 35: Использование библиотек DirectX и OpenGl.
- Вопрос 36: Создание компьютерных игр. Генераторы комьпьютерных игр.
- Вопрос 37: Проектирование информационных технологий. Язык uml 2.
- Вопрос 38: Интерпретаторы и компиляторы. История развития языков. Общая характеристика, назначение и область применения различных языков программирования.
- Интерпретаторы
- Компиляторы
- История развития языков. Общая характеристика, назначение и область применения различных языков программирования.
- Вопрос 39: Фриланс в информационных технологиях. Sharovar-ное программирование. Волонтерство в информационных технологиях.
- Фриланс
- Волонтеры
- Вопрос 40: Интерфейс usb.
- Список лабораторных работ (в количестве 5 штук с разделением на составные части)
- Часть 2: Использование ms Acses.
- Часть 3: Использование оборудования.
- Часть 4: Дополнительные лабораторные работы
- Пояснение по содержанию лекций и лабораторных работ
- Условный оператор (If) и оператор выбора (case) в языке Паскаль
- Циклы в языке Паскаль
- Объявление и использование своих функций и процедур в языке Паскаль
- Встроенные функции в языке Паскаль
- (2 Занятие)Лаб. Работа. 1. Часть 2. Особенности применения, особенности языка и среда Delphi (Знакомство с информационной технологией).
- Часть 1.2. Basic(Знакомство с информационной технологией)
- (4 Занятие)Лаб. Работа. 2. Часть 2. Особенности применения, особенности языка и среда Visual Basic (Знакомство с информационной технологией).
- Часть 1.3. Html (Знакомство с информационной технологией). Примечание: Подробно будут изучать (некоторые специальности) в рамках курса языки разметки web-страниц
- Часть 1.4. С-подобные языки(Знакомство с информационной технологией)
- (9 Занятие)Лаб. Работа. 4. Часть 4. Особенности применения, особенности языка и среда ms c# (Знакомство с информационной технологией).
- (10 Занятие)Лаб. Работа. 4. Часть 5. Особенности применения, особенности языка и среда JavaScript (Знакомство с информационной технологией).
- 1. Оператор for
- 2. Оператор while
- 3. Оператор do…while
- 4. Метки операторов
- 5. Оператор break
- 6. Оператор continue
- 5. Оператор for…in
- 6. Оператор with
- (11 Занятие)Лаб. Работа. 4. Часть 6. Особенности применения, особенности языка и среда php (Знакомство с информационной технологией).