C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.
Версии
Новые возможности
Версии 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
буквенные выражения, асинхронное main и некоторые другие.
В C # 7.2 введены private protected
, непоследовательные именованные аргументы, цифровой разделитель после базового спецификатора, условное выражение ref, ссылочная семантика для типов значений и некоторые другие.
В C # 7.3 введены функции, которые позволяют безопасному коду быть таким же производительным, как небезопасный код, новые опции компилятора, использование out
объявлений переменных в полях, инициализаторы свойств и конструкторов, поддержка ==
и !=
на типы кортежей и некоторые другие.
В C# 8.0 представлены ссылочные типы, допускающие значение NULL, которые генерируют предупреждения компилятора о возможном разыменовании пустых значений, если в коде явно не указано, что переменная может быть null
(например, string? foo
является переменной, которая может иметь значение null), асинхронные потоки, которые расширяют возможности, особенно интеграцию с IoT и облачными вычислениями. методы интерфейса по умолчанию для предотвращения критических изменений в интерфейсах, а также некоторые другиеулучшения.
C# 9.0 представил множество новых концепций и функций, таких как записи a>,Инициализировать только установщики,< a href="https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9#top-level-statements">Утверждения верхнего уровня,улучшения сопоставления шаблонови многое другое.
Компиляция обычно выполняется на Microsoft Intermediate Language (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 (встроенные устройства), он доступен для широкого спектра платформ.
В C# 10 появились объявления пространств имен в файловой области, глобальные директивы using, неявные использования, структуры записей, а также некоторые другие улучшения.
В C# 11 появились необработанные строковые литералы, обязательные элементы, универсальные атрибуты, шаблоны списков, локальные типы файлов, универсальная математическая поддержка и ещё.
Пример 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();
}
}
}
Пример Hello World начиная с .NET 6:
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
Ресурсы переполнения стека
FAQs
- Как отправить письмо в ASP.NET C #
- Каковы правильные номера версий для C #?
- В чем разница между строкой и строкой в C #?
- Почему
Random
каждый раз дает одинаковые результаты? - Захваченные переменные в циклах
- В C # возможно ли привести
List<Child>
кList<Parent>
? - Передает ли C # объекты по ссылке?
- Почему компилятор жалуется на мое условное выражение (
a == b ? x : y
)? - Почему я получаю
NullReferenceException
? (Ссылка на объект не установлена на экземпляр объекта) - Что такое исключение «индекс вне диапазона» и как его исправить?
- Скрытые возможности C #?
Примечания к выпуску
- Новые возможности C#(последние)
- Новые возможности в C# 4
- Новые функции в C # 6
- Новые функции в C # 7
- Новые функции в C # 8
- Новые возможности C # 9
- Новые возможности в C# 10
- Новые возможности в C# 11
- Что нового в .NET Framework?
Ресурсы
- История C #
- C # 5.0 Спецификация языка
- Проект спецификации языка C # 6.0
- Статья в Википедии
- Проекты .NET на GitHub
- старый блог Эрика Липперта||Новый блог Эрика Липперта
- Блог Джона Скита
- Руководство по программированию
- Начало работы с Visual C #
- Основы C #: разработка для начинающих
- Visual C # .NET для начинающих
- csharp.2000things
- Dot Net Perls
Книги
- CLR через C #
- C# 9.0 в двух словах: полный справочник
- C # в глубине
- Head First C# (3-е издание,4-е издание)
- Язык программирования C # (3-е издание, 4-е издание)
- Руководство по проектированию платформы (2-е издание, 3-е издание)
- Essential C# (6.0 (5-е издание),7.0 (6-е издание),8.0 (7-е издание )а>)
- Visual C # Как программировать
- Visual C # .NET шаг за шагом
- C # 5.0 выпущен
- Pro C# (7.0 (8-е издание),8.0 (9-е издание),9,0 (10-е издание))
- Изучение C # 3.0
- Начиная с Visual C# (4-е издание, 5-е издание)
- Программирование на C# (5.0,8.0)
- C # 4.0 Полный справочник
- C # Design Pattern Essentials
- C # 6.0 и .NET 4.6 Framework
- C # 7 и .NET Core
- Эффективный C # (охватывает C # 6.0), 50 конкретных способов улучшить ваш C # (3-е издание)
- Краткий справочник по синтаксису C # 7: Карманный справочник по языку, API и библиотеке (2-е издание)
Учебники
- MSDN
- Виртуальная академия Microsoft
- Learn.Microsoft.com
- microsoft.com/dotnet
- Pluralsight C # путь
- exercism.org
Будущее языка C #
Внесите свой вклад и предложите новые функции здесь.
Демо-проекты
C # Online IDE
C # Offline IDE