День 1295. #ЧтоНовенького #CSharp11
Обзор Новинок C# 11. Начало
C# 11 должен выйти ноябре 2022 года вместе с .NET 7. Рассмотрим новые функции, которые обещают выпустить в новой версии языка.
Эти функции все ещё находятся в стадии превью и, возможно, не все войдут в окончательный выпуск C# 11.
Попробовать новые функции можно в Visual Studio 2022 (версия 17.3.0 или выше). Также необходимо загрузить .NET 7 SDK (версия 7.0.0 preview 6 или выше). Кроме того, в функциях предварительного просмотра IDE нужно включить Use previews of the .NET SDK (Предварительный просмотр .NET SDK).
1. Обязательные члены
Модификатор required можно использовать для свойства, чтобы убедиться, что мы явно устанавливаем значение при инициализации объекта.
2. Структуры со значениями по умолчанию
В C# 10 нам приходилось явно устанавливать значения по умолчанию для каждого из его членов при добавлении в структуру конструктора:
3. Необработанные строковые литералы
Использование строк, содержащих кавычки, или ссылки на фрагменты кода, такие как JSON, стало намного проще. Раньше приходилось экранировать кавычки обратной косой чертой.
Необработанные строковые литералы начинаются и заканчиваются тремя кавычками
Также можно интерполировать с помощью знака
Окончание следует…
Источник: https://www.roundthecode.com/dotnet/c-sharp-11-preview-features-dotnet-7
Обзор Новинок C# 11. Начало
C# 11 должен выйти ноябре 2022 года вместе с .NET 7. Рассмотрим новые функции, которые обещают выпустить в новой версии языка.
Эти функции все ещё находятся в стадии превью и, возможно, не все войдут в окончательный выпуск C# 11.
Попробовать новые функции можно в Visual Studio 2022 (версия 17.3.0 или выше). Также необходимо загрузить .NET 7 SDK (версия 7.0.0 preview 6 или выше). Кроме того, в функциях предварительного просмотра IDE нужно включить Use previews of the .NET SDK (Предварительный просмотр .NET SDK).
1. Обязательные члены
Модификатор required можно использовать для свойства, чтобы убедиться, что мы явно устанавливаем значение при инициализации объекта.
public class RequiredMemberКогда мы инициализируем объект, мы должны убедиться, что мы установили значение для этого свойства. В противном случае будет выдана ошибка компиляции:
{
public required string Name { get; set; }
}
var requiredMember = new RequiredMember { Name = "Dave" };
Также возможно установить обязательный член внутри конструктора объекта. Однако мы должны добавить атрибут. Если мы просто установим требуемое свойство через параметр, это вызовет ошибку компиляции при вызове такого конструктора. Нужно установить атрибут [SetsRequiredMembers] над конструктором. Это сообщает компилятору, что мы устанавливаем необходимые элементы внутри конструктора:public class RequiredMemberЧто интересно, установка атрибута отменяет требование собственно установки значения свойства, и ошибки при этом не возникнет.
{
public required string Name { get; set; }
[SetsRequiredMembers]
public RequiredMember(string name)
{
Name = name;
}
}
2. Структуры со значениями по умолчанию
В C# 10 нам приходилось явно устанавливать значения по умолчанию для каждого из его членов при добавлении в структуру конструктора:
public struct AutoDefaultStructЕсли бы мы не установили свойство
{
public int Number { get; set; }
public AutoDefaultStruct()
{
Number = 0;
}
}
Number в конструкторе, это вызвало бы ошибку компиляции. В C# 11 если эти элементы не заданы в конструкторе, для них будут установлены значения по умолчанию. В данном случае для Number будет установлено значение 0.3. Необработанные строковые литералы
Использование строк, содержащих кавычки, или ссылки на фрагменты кода, такие как JSON, стало намного проще. Раньше приходилось экранировать кавычки обратной косой чертой.
Необработанные строковые литералы начинаются и заканчиваются тремя кавычками
"""...""". Теперь кавычки теперь будут рассматриваться как часть строки.Также можно интерполировать с помощью знака
$. Количество знаков $, предваряемых строкой, представляет собой количество фигурных скобок, необходимых для ссылки на переменную:public class RawStringLiteralВ примере выше использованы два знака
{
public static int MyNumber = 1;
public string MyJsonString =
$$"""
{
"number": "{{MyNumber}}"
}
""";
}
$ в начале, поэтому нужно включить две фигурные скобки, чтобы указать переменную, на которую мы хотим сослаться.Окончание следует…
Источник: https://www.roundthecode.com/dotnet/c-sharp-11-preview-features-dotnet-7
👍10
День 1296. #ЧтоНовенького #CSharp11
Обзор Новинок C# 11. Окончание
Начало
4. Обобщённые атрибуты
До C# 11 передача типа в атрибут требовала параметра типа Type и передачи значения через typeof
Шаблоны списков позволяют сопоставлять шаблоны для элементов массива или списка. Здесь у нас есть несколько вариантов.
При явном указании значений массив должен будет строго соответствовать шаблону:
Символ пустой переменной
Источник: https://www.roundthecode.com/dotnet/c-sharp-11-preview-features-dotnet-7
Обзор Новинок C# 11. Окончание
Начало
4. Обобщённые атрибуты
До C# 11 передача типа в атрибут требовала параметра типа Type и передачи значения через typeof
[MyAttr(typeof(string))]Теперь можно делать обобщённые атрибуты:
public class MyAttr<T> : Attribute { }
…
[MyAttr<string>]
Единственное ограничение, что это должен быть полностью сконструированный тип. Попытка использовать в атрибуте параметр типа обобщённого класса приведёт к ошибке компиляции:public class MyAttr<T> : Attribute { }
public class MyClass<T>
{
[MyAttr<T>] // Ошибка компиляции
public MyClass()
{
}
}
5. Шаблоны списковШаблоны списков позволяют сопоставлять шаблоны для элементов массива или списка. Здесь у нас есть несколько вариантов.
При явном указании значений массив должен будет строго соответствовать шаблону:
public bool Is_1_3_5(int[] numbers)
{
return numbers is [1, 3, 5];
// numbers должен быть длиной 3
// и иметь элементы 1, 3 и 5
}
Символ пустой переменной
_ соответствует единичному элементу с любым значением:numbers is [1, _, 5];Две точки
// numbers должен быть длиной 3
// и иметь элементы 1, <любое целое число> и 5
.. будут соответствовать 0 или более элементов:numbers is [1, .., 5];Также можно указать, что значение может быть больше или меньше определённого:
// numbers может быть любой длины
// должен начинаться с 1 и заканчиваться 5
numbers is [1, .., >=5];Как видите, шаблоны дают нам множество вариантов проверки элементов списка или массива.
// numbers может быть любой длины
// должен начинаться с 1
// и заканчиваться числом не меньше 5
Источник: https://www.roundthecode.com/dotnet/c-sharp-11-preview-features-dotnet-7
👍13
День 1447. #CSharp11
Обзор Новых Функций C# 11. Начало
Я уже ранее кратко описывал, какие новинки должны были появиться, а потом и появились в C# 11. В этой серии подведём итоги. Что же появилось, а что нет.
1. Необработанные (raw) строковые литералы (включено в релиз)
С обычными строками в C# бывает трудно работать, потому что нужно экранировать кавычки (
Вместо:
C# 11 вводит необработанные строковые литералы, чтобы обойти проблему экранирования. Используется новый разделитель — ряд кавычек, за которыми следует разрыв строки (в начале), и разрыв строки, за которым следует такое же количество кавычек (в конце). Вы просто вставляете свой блок кода или разметку между ними:
Необработанные строки не предназначены для замены дословных строк. Они предназначены для особого случая, когда вам нужно вставить блок произвольного кода или разметки.
Также можно использовать интерполяцию с помощью знака
Не беспокойтесь запутаться в пробелах и скобках. IDE в большинстве случаев подсветят интерполированные переменные или сообщат вам об ошибке в синтаксисе.
Продолжение следует…
Источник: https://medium.com/young-coder/a-mostly-complete-guide-to-c-11s-final-features-d43e6c9aa727
Обзор Новых Функций C# 11. Начало
Я уже ранее кратко описывал, какие новинки должны были появиться, а потом и появились в C# 11. В этой серии подведём итоги. Что же появилось, а что нет.
1. Необработанные (raw) строковые литералы (включено в релиз)
С обычными строками в C# бывает трудно работать, потому что нужно экранировать кавычки (
"), обратную косую черту (\) и разрывы строк (\n). В предыдущих версиях C# уже было решение — дословные (verbatim) строки, которые начинаются с @ и допускают использование специальных символов.Вместо:
string path = "c:\\myfilepath\\with-backslashes";будет:
string path = @"c:\myfilepath\with-backslashes";Этот подход работает достаточно хорошо для путей к файлам и регулярных выражений, но у него есть своя проблема с экранированием. Строки по-прежнему заключаются в кавычки, а кавычки являются обычным символом в коде, разметке и регулярных выражениях. Это означает, что вы не можете вставить какой-либо контент такого типа в дословную строку, не просмотрев её предварительно.
C# 11 вводит необработанные строковые литералы, чтобы обойти проблему экранирования. Используется новый разделитель — ряд кавычек, за которыми следует разрыв строки (в начале), и разрыв строки, за которым следует такое же количество кавычек (в конце). Вы просто вставляете свой блок кода или разметку между ними:
string xml = """Если вы обеспокоены тем, что внутри вашей строки может появиться последовательность из трёх двойных кавычек, можно изменить разделитель и использовать столько кавычек, сколько нужно, только одинаковое количество в начале и в конце:
<part number="1976">
<name>Windscreen Wiper</name>
<description>The Windscreen wiper automatically removes
rain from your windscreen. It has a rubber
<ref part="1977">blade</ref>, which can be ordered
separately.
</description>
</part>
""";
string xml = """"Как и в случае с дословными строками, в необработанной строке сохраняются разрывы строк и пробелы. Но есть одно исключение. Общие пробелы — количество, которое используется для выравнивания всего текста — обрезаются. Это означает, что в первом примере обрежутся первые 2 пробела во всех строках.
Теперь можно использовать """ в строке.
"""";
Необработанные строки не предназначены для замены дословных строк. Они предназначены для особого случая, когда вам нужно вставить блок произвольного кода или разметки.
Также можно использовать интерполяцию с помощью знака
$. Количество знаков $ в разделителе должно быть равно количеству фигурных скобок, необходимых для ссылки на переменную:int number = 1;В примере выше использованы два знака
string json =
$$"""
{
"number": "{{number}}"
}
""";
$ в начале, поэтому нужно включить две фигурные скобки, чтобы указать переменную, на которую мы хотим сослаться.Не беспокойтесь запутаться в пробелах и скобках. IDE в большинстве случаев подсветят интерполированные переменные или сообщат вам об ошибке в синтаксисе.
Продолжение следует…
Источник: https://medium.com/young-coder/a-mostly-complete-guide-to-c-11s-final-features-d43e6c9aa727
👍27