Все, что нужно знать о C# версии 8.0 — iFour Technolab

C# — это объектно-ориентированный современный язык программирования общего назначения. Он произносится как «Си шарп» и является наиболее широко используемым языком среди компаний-разработчиков .Net для разработки как небольших, так и крупномасштабных проектов. Международная организация по стандартизации (ISO) и Европейская ассоциация производителей компьютеров (ECMA) одобрили C# в рамках инициативы .Net. Используя язык C#, вы также можете разрабатывать кроссплатформенные приложения. C# 8.0 поддерживается на платформах .NET Standard 2.1 и .NET Core 3.x.

Новые возможности в C# 8.0

1. Нулевые ссылочные типы

  • Это помогает предотвратить вездесущие исключения нулевой ссылки. В ссылочном типе Null подтягивание null в обычные ссылочные типы, такие как string, делает эти типы не nullable. Это происходит мягко, с предупреждением, а не с ошибками.
  • В случае, если вы не хотите использовать nullable ссылочный тип, то вы можете использовать строку, а если вы пытаетесь использовать nullable ссылку, то сначала нужно проверить на null. Сначала компилятор анализирует поток вашего кода, чтобы увидеть, является ли он нулевым значением. Разработчики могут отказаться от проверки на null, если они готовы иметь дело с предупреждениями о результатах.

2. Сопоставление шаблонов

  • В версии C# 8.0 улучшена функциональность сопоставления шаблонов, которая уже была добавлена в версию C# 7.0.
  • В версии C# 8.0 добавлено множество новых форм согласования шаблонов. Сопоставление по образцу, например, шаблон Tuple, который позволяет сопоставить более одного значения в одном выражении сопоставления по образцу, как переключатель. Когда единственным результатом сопоставления шаблонов является присвоение значения одной переменной, выражение Switch позволяет использовать более простой синтаксис, чем операторы switch. Property pattern, если тип не имеет соответствующего метода Deconstruct, то вы можете использовать property pattern для достижения того же, что и с позиционными шаблонами.

Читать далее: Список инструментов отладки для разработки на C-sharp .Net

3. Асинхронные потоки

В C# уже есть поддержка асинхронных методов и методов-итераторов. В версии C# 8.0 два интерфейса IEnumerable и IEnumerator объединены в асинхронные потоки. Кроме того, для асинхронных итераторов требуется асинхронная версия интерфейса IDisposable. Например:


public static async System.Collections.Generic.IAsyncEnumerable<int> CreateList()
{
    for (int i = 0; i < 35; i++)
    {
        await Task.Delay(100);
        yield return i;
    }
}</int>

Вход в полноэкранный режим Выход из полноэкранного режима

4. Диапазон и индексы

В C# 8.0 представлен новый синтаксис для выражения диапазона значений. Начальный диапазон индекса является инклюзивным, а конечный индекс — эксклюзивным.

5. объявление sing

Использование оператора declaration может гарантировать, что метод Dispose будет вызван для типа, реализующего интерфейс IDisposable, как только экземпляр выйдет из области видимости. Он читабелен и менее подвержен ошибкам, чем эквивалентный код, написанный с использованием оператора.

6. Статические локальные функции

  • Эта функция была введена в версии C # 7.0. Она автоматически перехватывает контекст объемлющей области видимости, что позволяет сделать доступными внутри нее любые переменные из содержащего метода.
  • Но в версии C# 8.0 вы можете объявить локальную функцию как статическую. Если вы объявите локальную функцию как статическую, это предотвратит использование переменных из содержащего метода в локальной функции, и в то же время вы сможете избежать затрат производительности, связанных с их доступностью.

7. Одноразовые ссылочные структуры

В версиях C # 8.0 вы можете реализовать шаблон disposable, просто определив метод dispose в struct, который был объявлен с модификатором ref.


static int FileWriting(IEnumerable<string> lines)
          {
            using var file = new System.IO.StreamWriter("FileWriteExample.txt");
            int skippedLines = 0;
            foreach (string line in lines)
            {
                if (!line.Contains("Fifth"))
                {
                    file.WriteLine(line);
                }
                else
                {
                    skippedLines++;
                }
            }
            return skippedLines;
   }</string>

Вход в полноэкранный режим Выход из полноэкранного режима

8. Члены, доступные только для чтения

  • Эта возможность появилась в C# 8.0. Вы можете использовать модификатор readonly для членов структуры.
  • Readonly помечает член как запрещенный для изменения.

9. Назначение с нулевой коалесценцией

  • В C# 8.0 появился оператор присваивания с нулевой коалесценцией ‘??=’.
  • Этот оператор используется для присвоения значения правого операнда его левому операнду, в то время как значение левого операнда равно null.

int? num = null;
var numbers =new List<int>();
numbers.Add(num??= 10);
numbers.Add(num ??= 100);
print(num);
 //output 10</int>

Вход в полноэкранный режим Выход из полноэкранного режима

Ищете специализированную компанию по разработке C#? Свяжитесь сейчас.

10. Методы интерфейса по умолчанию

  • В C# вы можете создать интерфейс с объявлением членов, но без реализации. Но в C# 8.0 появилась новая возможность, которая позволяет интерфейсу иметь объявление, а также реализацию членов, и при этом вы не нарушаете никакую ранее существующую реализацию интерфейса. Это означает, что нет необходимости реализовывать члены интерфейса в классе, который наследует интерфейс.
  • Эта возможность похожа на технику, которая используется в программировании трейтов. Трейт — это техника ООП, которая поощряет повторное использование методов между несвязанными классами.
  • Эта возможность также называется виртуальными методами расширения. Вы можете опробовать эту функцию, как показано ниже:

public interface IInterfaceDefault
  {
    public void DefaultMethod()
    {
      Console.WriteLine("Default Method!!");
    }
  }
 public class ImplementedClass : IInterfaceDefault
  {
  }
class Program
  {
    static void Main()
    {
      IInterfaceDefault ImplementedClass = new ImplementedClass ();
      ImplementedClass.DefaultMethod();
    }
  }
//Output: Default Method!!

Войти в полноэкранный режим Выйти из полноэкранного режима

11. Переключение выражений

  • В существующем операторе Switch операторы case и break являются избыточными, поскольку повторяются в каждой строке оператора switch.
  • В C# 8.0 мы можем присвоить результат оператора switch переменной или напрямую вернуть результат. Таким образом, отпадает необходимость в лишних break и case.
  • Как мы уже видели в функции Pattern Matching в C# 8.0, в оператор switch можно передавать несколько параметров.
  • Приведенный ниже пример иллюстрирует использование нового выражения Switch:

class Program    
    {    
        static void Main(string[] args)    
        {
  var operationType=1;
  float ans=operationType  switch
  {
    1=>5+3,
    2=>5-3.
    3=>5*3.
    4=>5/3,
    5=>5%3,
  };
  Console.WriteLine(ans);
         }   
    }
//Output 8

Войти в полноэкранный режим Выйти из полноэкранного режима

12. Stackalloc во вложенных выражениях

  • Как следует из названия, stackalloc выделяет блок памяти в стеке. После завершения работы функции блок памяти автоматически удаляется.
  • C# 8.0 разрешил использовать stackalloc во вложенных выражениях, если результатом выражения является System.Span или System.ReadOnlySpan.

13. Улучшение интерполированных стенографических строк

  • В предыдущих версиях C# порядок следования лексем $ и @ в стенографических строках был фиксированным, то есть лексема $ должна предшествовать лексеме @.
  • Но в C# 8.0 нет определенного порядка для этих маркеров. Это означает, что и ‘$@’, и ‘@$’ являются допустимыми последовательностями.

14. Асинхронная одноразовая

В C# 8.0 появился новый интерфейс IAsyncDisposable. Реализовав этот интерфейс, вы можете выполнять асинхронные операции очистки.


public async ValueTask DisposeAsync()
{
    await Task.Delay(5000);
}

Вход в полноэкранный режим Выход из полноэкранного режима

Заключение

После длительного периода ожидания версия C# 8.0 доступна в предварительном просмотре в составе Visual Studio 2019. Не все возможности C# 8.0 доступны в .NET framework. Наиболее важной особенностью последней версии C# 8.0 являются нулевые ссылочные типы, улучшения в согласовании шаблонов, асинхронные потоки & Range и индексы.

Оцените статью
Procodings.ru
Добавить комментарий