C# (произносится как "видеть резкое") - это статически типизированный, мультипарадигмальный язык программирования высокого уровня, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft.NET, в том числе.NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном в формальной спецификации C# или C#.

C# - это мультипарадигмальный управляемый объектно-ориентированный язык программирования, созданный Microsoft совместно с.NET. C# можно использовать с любой реализацией.NET, такой как.NET Core, .NET Framework, Mono и Xamarin.

Версии

+---------+---------------------------------------------------------+----------------+----------------------------------+---------------------------------+
| Version |                  Language specification                 |      Date      |           .NET Version           |          Visual Studio          |
|         +---------------+----------------+------------------------+                |                                  |                                 |
|         |      Ecma     |     ISO/IEC    |        Microsoft       |                |                                  |                                 |
+---------+---------------+----------------+------------------------+----------------+----------------------------------+---------------------------------+
| C# 1.0  | December 2002 | April 2003     | January 2002           | January 2002   | .NET Framework 1.0               | Visual Studio .NET 2002         |
+---------+               |                +------------------------+----------------+----------------------------------+---------------------------------+
| C# 1.1  |               |                | October 2003           | April 2003     | .NET Framework 1.1               | Visual Studio .NET 2003         |
| C# 1.2  |               |                |                        |                |                                  |                                 |
+---------+---------------+----------------+------------------------+----------------+----------------------------------+---------------------------------+
| C# 2.0  | June 2006     | September 2006 | September 2005         |                | .NET Framework 2.0               | Visual Studio .NET 2005         |
|         |               |                |                        |                | .NET Framework 3.0               | Visual Studio .NET 2008         |
+---------+---------------+----------------+------------------------+----------------+----------------------------------+---------------------------------+
| C#3.0  |                -               | August 2007            |                | .NET Framework 2.0 (Except LINQ) | Visual Studio 2008              |
|         |                                |                        | November 2007  | .NET Framework 3.0 (Expect LINQ) |                                 |
|         |                                |                        |                | .NET Framework 3.5               |                                 |
+---------+                                +------------------------+----------------+----------------------------------+---------------------------------+
| C# 4.0  |                                | April 2010             | April 2010     | .NET Framework 4                 | Visual Studio 2010              |
+---------+---------------+----------------+------------------------+----------------+----------------------------------+---------------------------------+
| C# 5.0  | December 2017 | December 2018  | June 2013              | August 2012    | .NET Framework 4.5               | Visual Studio 2012              |
|         |               |                |                        |                |                                  | Visual Studio 2013              |
+---------+---------------+----------------+------------------------+----------------+----------------------------------+---------------------------------+
|         |                -               | Draft                  |                | .NET Framework 4.6               | Visual Studio 2015              |
| C# 6.0  |                                |                        | July 2015      | .NET Core 1.0                    |                                 |
|         |                                |                        |                | .NET Core 1.1                    |                                 |
+---------+                                +------------------------+----------------+----------------------------------+---------------------------------+
| C# 7.0  |                                | Specification proposal | March 2017     | .NET Framework 4.7               | Visual Studio 2017 version 15.0 |
+---------+                                +------------------------+----------------+----------------------------------+---------------------------------+
| C# 7.1  |                                | Specification proposal | August 2017    | .NET Core 2.0                    | Visual Studio 2017 version 15.3 |
+---------+                                +------------------------+----------------+----------------------------------+---------------------------------+
| C# 7.2  |                                | Specification proposal | November 2017  |                 -                | Visual Studio 2017 version 15.5 |
+---------+                                +------------------------+----------------+----------------------------------+---------------------------------+
|         |                                | Specification proposal |                | .NET Core 2.1                    | Visual Studio 2017 version 15.7 |
| C# 7.3  |                                |                        | May 2018       | .NET Core 2.2                    |                                 |
|         |                                |                        |                | .NET Framework 4.8               |                                 |
+---------+                                +------------------------+----------------+----------------------------------+---------------------------------+
| C# 8    |                                | Specification proposal | September 2019 | .NET Core 3.0                    | Visual Studio 2019 version 16.3 |
+---------+--------------------------------+------------------------+----------------+----------------------------------+---------------------------------+

Новые особенности

Версии 1.0/1.2 и 2.0 C# были представлены и утверждены как стандарты ECMA ( веб-версия) и ISO/IEC. Последняя версия ECMA соответствует спецификации Microsoft C# 5.0. Спецификации языка также доступны в Microsoft для C# 3.0 и C# 5.0, а также в проекте C# 6.0.

Система типов языка изначально была статической, разрешалось только явное объявление переменных. Вступление к var (C#3.0) и dynamic(C# 4.0) позволил ему использовать вывод типа для неявной типизации переменных и использовать системы динамических типов соответственно. Делегаты, особенно с поддержкой лексического замыкания для анонимных методов (C# 2.0) и лямбда-выражений (C#3.0), позволяют использовать язык для функционального программирования.

C# 5.0 представил async а также await ключевые слова для упрощения использования асинхронных вызовов функций.

В C# 6.0 появился оператор нулевого распространения ?., фильтры исключений, интерполяция строк и многие другие функции, помогающие писать простой код.

В C# 7.0 введено несколькоout аргументы, сопоставление с образцом, кортежи для возвращаемого значения, is-выражения и switch операторы с шаблонами, деконструкцией, локальными функциями и многим другим.

В C# 7.1 появилось универсальное сопоставление с образцом, выведенные имена элементов кортежа,default буквальные выражения, async main и некоторые другие.

Представлен C# 7.2private protected, не завершающие именованные аргументы, цифровой разделитель после базового спецификатора, условное выражение ref, ссылочная семантика для типов значений и многое другое.

В C# 7.3 представлены функции, которые позволяют безопасному коду быть таким же производительным, как и небезопасный код, новые параметры компилятора, использованиеout объявления переменных в инициализаторах полей, свойств и конструкторов, поддержка == а также != о типах кортежей и многом другом.

В C# 8.0 введены ссылочные типы, допускающие значение NULL, которые генерируют предупреждения компилятора о возможном разыменовании значений NULL, если в коде явно не указано, что переменная может бытьnull (например, string? foo- переменная, которая может иметь значение NULL), асинхронные потоки, которые расширяют возможности, в частности, IoT и интеграцию с облаком, а также методы интерфейса по умолчанию для предотвращения нарушения изменений интерфейсов, а также некоторые другие улучшения.

Компиляция обычно выполняется на промежуточном языке Microsoft (MSIL), который затем JIT-компилируется в собственный код (и кэшируется) во время выполнения в Common Language Runtime (CLR). Однако такие параметры, как NGen (для .NET Framework) и AOT (для Mono), означают, что код C# может быть непосредственно скомпилирован в образ в машинном коде. Кроме того, некоторые платформы (например,.NET Micro Framework) действуют как интерпретаторы CIL без JIT.

Обобщения в C# частично предоставляются средой выполнения, в отличие от шаблонов C++ (шаблоны разрешаются во время компиляции) или универсальных шаблонов Java (которые используют стирание типов).

Благодаря сочетанию .NET Core для Windows, macOS и Linux, .NET Framework для Windows (настольный / серверный / мобильный), Mono, который поддерживает приложения Xamarin на Android, Mac, iOS, tvOS и watchOS, Silverlight/Moonlight (браузер / мобильный), Compact Framework (для мобильных устройств) и Micro Framework (для встраиваемых устройств), он доступен для широкого спектра платформ.


Пример Hello World:

using System;

class Hello
{
    static void Main()
    {
        Console.WriteLine("Hello, World!");
    }
}

Пример Hello World с использованием классов:

using System;

namespace HelloWorldUsingClasses
{
   class Greeting
   {
       public static void SayHello()
       {
           Console.WriteLine("Hello World!");
       }
   }

   class Program
   {
       static void Main(string[] args)
       {
           Greeting.SayHello();
       }
   }
}

Ресурсы по переполнению стека


FAQs


Ресурсы


Книги


Учебники


Будущее языка C#

Делитесь и предлагайте новые функции здесь.


Демонстрационные проекты


C# Интернет IDE


C# Offline IDE

Связанные теги