C Sharp



























































С#
C Sharp wordmark.svg
Класс языка

мультипарадигмальный:
объектно-ориентированный,
обобщённый,
процедурный,
функциональный,
событийный,


рефлективный

Появился в
2000
Автор
Андерс Хейлсберг
Разработчик
Хейлсберг, Андерс
Выпуск
7.3 (07 мая 2018)
Тестовая версия
8.0
Система типов
статическая, динамическая, строгая, утиная, вывод типов
Основные реализации:
.NET Framework, Mono, .NET Core, DotGNU
Диалекты
Cω, Spec#, Polyphonic C#
Испытал влияние
C++, Java[1][2][3], Delphi, Модула-3 и Smalltalk
Повлиял на
Cω, F#, Nemerle, Vala, Windows PowerShell, Kotlin
Сайт
visualstudio.com

C# (произносится си шарп) — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота[4] как язык разработки приложений для платформы Microsoft .NET Framework. Впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.


C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.


Переняв многое от своих предшественников — языков C++, Pascal, Модула, Smalltalk и, в особенности, Java — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ и некоторых других языков, не поддерживает множественное наследование классов (между тем допускается множественное наследование интерфейсов).




Содержание






  • 1 Особенности языка


  • 2 Название языка


  • 3 Стандартизация


  • 4 Версии


    • 4.1 Версия 1.0


    • 4.2 Версия 2.0


    • 4.3 Версия 3.0


    • 4.4 Версия 4.0


    • 4.5 Версия 5.0


    • 4.6 Версия 6.0


    • 4.7 Версия 7.0




  • 5 Пример «Hello, World!»


  • 6 Реализации


  • 7 См. также


  • 8 Примечания


  • 9 Литература


  • 10 Ссылки





Особенности языка |


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# и др.



Название языка |





Нота C♯[en]


Название «Си шарп» (от англ. sharp — диез) происходит от буквенной музыкальной нотации, где латинской букве C соответствует нота До, а знак диез (англ. sharp) означает повышение соответствующего ноте звука на полутон[5], что аналогично названию языка C++, где «++» обозначает инкремент переменной. Название также является игрой с цепочкой C → C++ → C++++(C#), так как символ «#» можно представить состоящим из 4 знаков «+»[6].


Из-за технических ограничений на отображение (стандартные шрифты, браузеры и т. д.) и того, что знак диеза ♯ не представлен на стандартной клавиатуре компьютера, при записи имени языка программирования используют знак решётки (#)[7]. Это соглашение отражено в Спецификации языка C# ECMA-334[8]. Тем не менее, на практике (например, при размещении рекламы и коробочном дизайне[9]), «Майкрософт» использует знак диеза.


Названия языков программирования не принято переводить, поэтому язык называют, используя транскрипцию, — «Си шарп».



Стандартизация |


C# стандартизирован в ECMA (ECMA-334)[10] и ISO (ISO/IEC 23270)[11].


Известно как минимум о трёх независимых реализациях C#, базирующихся на этой спецификации и находящихся в настоящее время на различных стадиях разработки:




  • Mono, начата компанией Ximian, продолжена её покупателем и преемником Novell, а затем Xamarin.


  • dotGNU и Portable.NET, разрабатываемые Free Software Foundation.



Версии |


На протяжении разработки языка C# было выпущено несколько его версий:
















































































Версия
Спецификация языка
Дата

.NET Framework

Visual Studio

ECMA

ISO/IEC
Microsoft
C# 1.0

Декабрь 2002

Апрель 2003 (недоступная ссылка)

Январь 2002
Январь 2002

.NET Framework 1.0

Visual Studio .NET (2002)
C# 1.2

Октябрь 2003
Апрель 2003

.NET Framework 1.1

Visual Studio .NET 2003
C# 2.0

Июнь 2006

Сентябрь 2006

Сентябрь 2005[12]
Ноябрь 2005

.NET Framework 2.0

Visual Studio 2005
C# 3.0
Отсутствует[13]

Август 2007
Ноябрь 2007

.NET Framework 3.5

Visual Studio 2008
C# 4.0

Апрель 2010
Апрель 2010

.NET Framework 4

Visual Studio 2010
C# 5.0

Декабрь 2017
Отсутствует[13]

Июнь 2013
Август 2012

.NET Framework 4.5

Visual Studio 2012
C# 6.0
Отсутствует
Июль 2015
Июль 2015

.NET Framework 4.6

Visual Studio 2015
C# 7.0
Отсутствует
Март 2017
Март 2017

.NET Framework 4.6

Visual Studio 2017

































Общая информация по версиям
Версия Нововведения
C# 2.0

  • Частичные типы


  • Обобщённые типы (generics)

  • Итераторы и ключевое слово yield

  • Анонимные методы

  • Оператор null-объединения


  • Nullable-типы


C# 3.0


  • Запросы, интегрированные в язык (LINQ)

  • Инициализаторы объектов и коллекций

  • Лямбда-выражения

  • Деревья выражений

  • Неявная типизация и ключевое слово var

  • Анонимные типы

  • Методы расширения

  • Автоматические свойства


C# 4.0


  • Динамическое связывание и ключевое слово dynamic

  • Именованные и опциональные аргументы

  • Обобщенная ковариантность и контрвариантность

  • Библиотека TPL, концепция задач и классы Task, Parallel

  • Класс MemoryCache

  • Классы параллельных коллекций


C# 5.0


  • Шаблон TAP

  • Асинхронные методы async и await

  • Сведения о вызывающем объекте


C# 6.0


  • Компилятор как сервис

  • Импорт членов статических типов в пространство имён

  • Фильтры исключений


  • await в блоках catch/finally

  • Инициализаторы автосвойств

  • Автосвойства только для чтения


  • null-условные операции (?. и ?)

  • Интерполяция строк

  • Оператор nameof

  • Инициализатор словаря

  • Функции сжатые до выражений


C# 7.0[14]



  • out-переменные

  • Сопоставление с шаблоном

  • Шаблоны с is

  • Шаблоны и выражение switch

  • Кортежи

  • Распаковка кортежей (деконструкторы)

  • Локальные функции

  • Улучшения литералов

  • Локальные переменные и возвращаемые значения по ссылке

  • Расширение списка типов, возвращаемых асинхронными методами

  • Больше членов класса в виде выражений


  • throw выражения




Версия 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++, они поддерживают некоторые дополнительные возможности и работают на уровне виртуальной машины. Вместе с тем, параметрами обобщённого типа не могут быть выражения, они не могут быть полностью или частично специализированы, не поддерживают шаблонных параметров по умолчанию, от шаблонного параметра нельзя наследоваться, и т. д.[15]

  • Новая форма итератора, позволяющая создавать сопрограммы с помощью ключевого слова yield, подобно Python и Ruby.

  • Анонимные методы, обеспечивающие функциональность замыкания.

  • Оператор null-объединения: '??': 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[16]. В сентябре 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, позволяющие делать запросы из XML документов, коллекций и т. п. Эти запросы имеют сходство с запросами SQL и реализуются компонентом LINQ. (Сама фраза «language integrated query» переводится «запрос, интегрированный в язык».)

  • Инициализация объекта вместе с его свойствами:



Customer c = new Customer(); c.Name = "James"; c.Age=30;

можно записать как

Customer c = new Customer { Name = "James", Age = 30 };



  • Лямбда-выражения:


listOfFoo.Where(delegate(Foo x) { return x.size > 10; });

теперь можно записать как

listOfFoo.Where(x => x.size > 10);


  • Деревья выражений:

лямбда-выражения теперь могут представляться в виде структуры данных, доступной для обхода во время выполнения, тем самым позволяя транслировать строго типизированные C#-выражения в другие домены (например, выражения SQL).


  • Неявная типизация: Вывод типов локальной переменной. Для неявной типизации вместо названия типа данных используется ключевое слово var. Затем уже при компиляции компилятор сам выводит тип данных исходя из присвоенного значения: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[17]


  • Возможность использования позднего связывания, для использования:

    • с языками с динамической типизацией (Python, Ruby)

    • с COM-объектами

    • отражения (reflection)

    • объектов с изменяемой структурой (DOM). Появляется ключевое слово dynamic.



  • Именованные и опциональные параметры

  • Новые возможности COM interop


  • Ковариантность и контравариантность обобщенных интерфейсов и делегатов


  • Контракты в коде (Code Contracts)

  • Библиотека параллельных задач TPL (Task Parallel Library), концепция задач и классы Task, TaskFactory, Parallel

  • Добавлен класс MemoryCache, который предназначен для кэширования контента. Он похож на класс Cache ASP.NET, но его можно использовать при написании веб- / графических / консольных приложений.

  • Добавлено пространство имен System.Collections.Concurrent и новые классы параллельных коллекций (ConcurrentQueue, ConcurrentStack, ConcurrentBag,…), которые предоставляют не только большую эффективность, но и более полную потокобезопасность.


Примеры:


dynamic calc = GetCalculator();
int sum = calc.Add(10, 20); // Динамический вызов

public void SomeMethod(int x, int y = 5, int z = 7); // Опциональные параметры


Версия 5.0 |


Новые возможности в версии 5.0



  • Шаблон TAP (Task-based Asynchronous Pattern). TAP использует один метод для представления инициализации и завершения асинхронной операции.

  • Асинхронные методы (async и await) — как реализация шаблона TAP.

  • Сведения о вызывающем объекте



Версия 6.0 |


Новые возможности в версии 6.0



  • null-условные операторы. Добавлены новые операторы: ?. и ?:

int? length = customers?.Length; // null if customers is null
Customer first = customers?[0]; // null if customers is null

  • Функции сжатые до выражений (expression-bodied functions). Теперь определение метода может быть задано с использованием лямбда-синтаксиса:

public Point Move(int dx, int dy) => new Point(x + dx, y + dy);

  • Инициализаторы автосвойств. Автосвойства теперь можно инициализировать при объявлении:

public string First { get; set; } = "Jane";

  • Автосвойства только для чтения. Автосвойства теперь могут быть объявлены без сеттеров:

public string First { get; } = "Jane";

  • Инициализаторы индексов. Теперь можно инициализировать не только объекты и коллекции, но и словари:

var numbers = new Dictionary<int, string> {
[7] = "seven",
[9] = "nine",
[13] = "thirteen"
};

  • Интерполяция строк. Вместо использования конструкций с String.Format(), например:

var s = String.Format("{0} is {1} year{{s}} old", p.Name, p.Age);

теперь можно размещать код прямо в строке:


var s = $"{p.Name} is {p.Age} year{{s}} old";

  • Фильтры исключений. Появилась возможность задавать условия для блоков catch:

try {  } catch (Exception e) when (Log(e)) {  }

  • Импорт статических функций типов. Теперь доступ к статическим членам типов возможен без указания полного имени этих членов:

using static System.Console;
using static System.Math;
class Program
{
static void Main()
{
WriteLine(Sqrt(3*3 + 4*4));
}
}

  • Оператор nameof. Новый оператор, который возвращает компактное строковое представление для переданного в качестве аргумента типа:

WriteLine(nameof(person.Address.ZipCode)); // prints "ZipCode"

  • Для асинхронного программирования была добавлена возможность использования операторов await внутри блоков catch и finally:

Resource res = null;
try
{
res = await Resource.OpenAsync(); // You could do this.
}
catch(ResourceException e)
{
await Resource.LogAsync(res, e); // Now you can do this …
}
finally
{
if (res != null) await res.CloseAsync(); // … and this.
}


Версия 7.0 |


Новые возможности в версии 7.0[14]



  • out-переменные, которые позволяют объявить переменные сразу в вызове метода (причем областью видимости для таких переменных является внешний блок):

p.GetCoordinates(out int x, out int y);


  • Сопоставление с шаблоном. Вводится понятие шаблона (pattern), который представляет собой синтаксическую конструкцию, позволяющую проверить соответствие переменной определённой форме и извлечь из неё информацию.

  • Шаблоны с is (is теперь может использоваться не только с типом, но и с шаблоном — в качестве правого аргумента)

  • Шаблоны и выражение switch. Варианты использования switch были расширены, теперь можно:

    • использовать любые типы (не только примитивные);

    • использовать шаблоны в выражениях case;

    • добавлять дополнительные условия к выражениям case (используя ключевое слово when).



  • Кортежи. Добавлен новый значимый тип кортеж и синтаксис работы с данными этого типа:


(string, string, string) LookupName(long id) // возвращаемый тип - кортеж
{
... // инициализируем данные
return (first, middle, last); // литерал кортежа
}


  • Распаковка кортежей. Была добавлена новая синтаксическая конструкция деконструктор, позволяющая извлечь кортеж, состоящий из членов класса.

  • Локальные функции. Теперь функцию, которая используется только в теле какого-либо метода можно объявить прямо в теле этого метода.

  • Улучшения литералов. Были добавлены бинарные литералы и символ разделителя (_) в числовых литералах.

  • Локальные переменные и возвращаемые значения по ссылке. Расширена функциональность ключевого слова ref. Теперь можно возвратить данные из метода или сохранить их в локальной переменной по ссылке.

  • Расширение списка типов, возвращаемых асинхронными методами

  • Больше членов класса в виде выражений. Синтаксис функций, сжатых до выражений (expression-bodied functions), теперь применим для сеттеров, геттеров, конструкторов и деструкторов.


  • throw-выражения. Теперь можно использовать throw в функциях, сжатых до выражений (expression-bodied functions):


public string GetLastName() => throw new NotImplementedException();


Пример «Hello, World!» |


Ниже представлен код классической программы «Hello world» на C# для консольного приложения:


using System;

namespace Example
{
class Program
{
static void Main()
{
Console.WriteLine("Hello World!"); // Вывод заданного текста в консоль
Console.ReadKey(); // Ожидание нажатия клавиши пользователем
}
}
}

и код этой же программы для приложения Windows Forms:


// assembly: System.dll
// assembly: System.Drawing.dll
// assembly: System.Windows.Forms.dll
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsForms
{
public class Program
{
[STAThread]
public static void Main()
{
new DemoForm().ShowDialog();
}
}

public class DemoForm : Form
{
Label label = new Label();

public DemoForm()
{
label.Text = "Hello World!";
this.Controls.Add(label);
this.StartPosition = FormStartPosition.CenterScreen;
this.BackColor = Color.White;
this.FormBorderStyle = FormBorderStyle.Fixed3D;
}
}
}


Реализации |


Существует несколько реализаций C#:



  • Реализация C# в виде компилятора csc.exe включена в состав .NET Framework (включая .NET Micro Framework, .NET Compact Framework и его реализации под Silverlight и Windows Phone 7).

  • В составе проекта Rotor (Shared Source Common Language Infrastructure) компании Microsoft.

  • Проект Mono включает в себя реализацию C# с открытым исходным кодом.

  • Проект DotGNU также включает компилятор C# с открытым кодом.


  • DotNetAnywhere[18] — ориентированная на встраиваемые системы реализация CLR, поддерживает практически всю спецификацию C# 2.0.



См. также |


.mw-parser-output .ts-Родственные_проекты{background:#f8f9fa;border:1px solid #a2a9b1;clear:right;float:right;font-size:90%;margin:0 0 1em 1em;padding:.5em .75em}.mw-parser-output .ts-Родственные_проекты th,.mw-parser-output .ts-Родственные_проекты td{padding:.25em 0;vertical-align:middle}.mw-parser-output .ts-Родственные_проекты td{padding-left:.5em}











  • Microsoft Visual Studio

  • Сравнение C Sharp и Java

  • Cosmos (операционная система)

  • Vala



Примечания |





  1. «Поскольку язык С# унаследовал свой синтаксис от C++ и Java…» Трей Нэш. C# 2010: ускоренный курс для профессионалов = Accelerated C# 2010. — М.: Вильямс, 2010. — С. 17. — 592 с. — ISBN 978-5-8459-1638-9.


  2. «Язык C# <…> унаследовал много полезных возможностей от других языков программирования и напрямую связан с двумя наиболее широко применяемыми в мире компьютерными языками — C и C++, а также с языком Java», однако далее: «Связь между C# и Java более сложная. Оба языка разработаны для создания переносимого кода, базируются на C и C++, используют их синтаксис и объектную модель. Однако между этими языками нет прямой связи, они больше похожи на двоюродных братьев, имеющих общих предков, но отличающихся многими признаками» Герберт Шилдт. C# учебный курс = C#. A Beginner's Guide. — М.: Питер, 2003. — С. 20. — ISBN 966-552-121-7.


  3. Герберт Шилдт. Полный справочник по С# = C#: The Complete Reference. — М.: Издательский дом «Вильямс», 2004. — С. 26—27. — 752 с. — ISBN 5-8459-0563-X.


  4. Либерти Д. Язык программирования C# // Программирование на C#. — Санкт-Петербург. — 2003: Символ-Плюс. — С. 26. — 688 с. — ISBN 5-93286-038-3.


  5. Kovacs, James C#/.NET History Lesson (англ.) (September 7, 2007). Проверено 23 марта 2011. Архивировано 21 августа 2011 года.


  6. The A-Z of Programming Languages: C# (англ.). computerworld.com.au (1 October 2008). Проверено 2 сентября 2014.


  7. Microsoft C# FAQ (неопр.) (недоступная ссылка — история). Microsoft. Проверено 25 марта 2008. Архивировано 30 апреля 2003 года.


  8. C# Language Specification. — 4th. — ECMA International, 2006.


  9. Visual C#.net Standard (неопр.) (JPEG). Microsoft (September 4, 2003). Проверено 18 июня 2009. Архивировано 21 августа 2011 года.


  10. Standard ECMA-334 C# Language Specification, 4rd edition (англ.). Ecma International (June 2006). Проверено 16 мая 2017.


  11. ISO/IEC 23270:2003 Information technology -- C# Language Specification (англ.). International Organization for Standardization (April 2003). Проверено 16 мая 2017.


  12. Спецификация по Microsoft C# 2.0 содержит описание лишь новых возможностей версии 2.0. Особенности версии описаны в спецификации 1.2, приведенной выше.


  13. 12 Для версий языка C# 3.0, 4.0 и 5.0 пока нет утверждённых ECMA или ISO/IEC спецификаций.


  14. 12 Mads Torgersen. New Features in C# 7.0 (англ.). .NET Blog. Microsoft (9 March 2017). Проверено 7 мая 2017.


  15. Differences Between C++ Templates and C# Generics (C# Programming Guide) (англ.). Microsoft (17 December 2016). Проверено 16 мая 2017.


  16. Anders Hejlsberg - Programming data in C# 3.0 (англ.). The Channel 9 Team. Microsoft (16 June 2004). Проверено 16 мая 2017.


  17. Visual Studio 2010: примеры для C# 4.0 (неопр.). Microsoft (17 июля 2012). Проверено 16 мая 2017.


  18. Dot Net Anywhere




Литература |



  • Джон Скит. C# для профессионалов: тонкости программирования, 3-е издание, новый перевод = C# in Depth, 3rd ed.. — М.: «Вильямс», 2014. — 608 с. — ISBN 978-5-8459-1909-0.

  • Кристиан Нейгел и др. C# 5.0 и платформа .NET 4.5 для профессионалов = Professional C# 5.0 and .NET 4.5. — М.: «Диалектика», 2013. — 1440 с. — ISBN 978-5-8459-1850-5.

  • А. Хейлсберг, М. Торгерсен, С. Вилтамут, П. Голд. Язык программирования C#. Классика Computers Science. 4-е издание = C# Programming Language (Covering C# 4.0), 4th Ed. — СПб.: «Питер», 2012. — 784 с. — ISBN 978-5-459-00283-6.


  • Э. Стиллмен, Дж. Грин. Изучаем C#. 2-е издание = Head First C#, 2ed. — СПб.: «Питер», 2012. — 704 с. — ISBN 978-5-4461-0105-4. (недоступная ссылка)

  • Эндрю Троелсен. Язык программирования C# 5.0 и платформа .NET 4.5, 6-е издание = Pro C# 5.0 and the .NET 4.5 Framework, 6th edition. — М.: «Вильямс», 2013. — 1312 с. — ISBN 978-5-8459-1814-7.

  • Джозеф Албахари, Бен Албахари. C# 6.0. Справочник. Полное описание языка = C# 6.0 in a Nutshell: The Definitive Reference. — М.: «Вильямс», 2018. — 1040 с. — ISBN 978-5-8459-2087-4. — ISBN 978-1-491-92706-9.

  • Герберт Шилдт. C# 4.0: полное руководство = C# 4.0 The Complete Reference. — М.: «Вильямс», 2010. — С. 1056. — ISBN 978-5-8459-1684-6.

  • Кристиан Нейгел, Карли Уотсон и др. Visual C# 2010: полный курс = Beginning Microsoft Visual C# 2010. — М.: Диалектика, 2010. — ISBN 978-5-8459-1699-0.



Ссылки |



  • Основные материалы по Visual C#

  • Руководство по программированию на C#

  • Язык C# (инструкции по C#)

  • Практическое руководство. Создание приложений Windows Forms на C#

  • Доклад, подробно описывающий новшества в языке С# версии 4.0














Popular posts from this blog

浄心駅

カンタス航空