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

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

Версии 1.0/1.2 и 2.0 С# были представлены и утверждены как стандарты ECMA (Web-версия) и 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 -expressions & switch операторы с шаблонами, деконструкцией, локальными функциями и некоторыми другими.

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

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

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

В С# 8.0 введены недействительные ссылочные типы, которые генерируют предупреждения компилятора о возможном разыменовании нулей, если только в коде не указано, что переменная может быть null (например, string? foo - это переменная, которая может быть нулевой), асинхронные потоки, которые обеспечивают, в частности, интеграцию 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();
        }
    }
}

Ресурсы Qaru


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


Ресурсы


Книги


Учебники


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

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


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


С# Online IDE


С# Offline IDE

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