С# (произносится как "see sharp") - это высокоуровневый, статически типизированный, объектно-ориентированный язык программирования, разработанный Microsoft. Код С# обычно ориентирован на семейство инструментов Microsoft.NET и среды выполнения, включая.NET Framework и.NET Core. Используйте этот тег для вопросов о коде, написанном на официальной спецификации С# или С#. В большинстве вопросов также нужен тег для целевой платформы.NET, такой как [.net] (для.NET Framework), [.net-core] или [.net-standard].

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

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

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

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

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

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

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

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

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

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

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

Обобщения в С# предоставляются частично во время выполнения, в отличие от шаблонов 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 ExampleClass
    {
        string exampleString = "Hello World!";
        public ExampleClass()
        {
            Console.WriteLine(exampleString);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ExampleClass objHelloWorld = new ExampleClass();
        }
    }
}

Ресурсы


Вопросы и ответы


Ресурсы


книги


Учебники


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

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


Демо-проекты


С# Online IDE


С# Offline IDE

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