В этой статье мы рассмотрим новую дериктиву using и элементы структуры, доступные только для чтения.

Новая деректива using

Использование ключевого слова играет большую роль в первичной очистке ресурсов без явного вызова. С C# он стал еще проще в использовании и выполняет ту же работу, что и раньше.
Давайте посмотрим на приведенный ниже код, чтобы понять изменение. В приведенном ниже примере были добавлены как старые, так и новые стили использования.


    public static void ExecuteUsingFunction()  
    {  
    List<string> messages = new List<string>(); messages.Add("Hello readers of Learning C# 8!!"); messages.Add("How are you!!"); ExecuteOldUsingFunction(messages); ExecuteNewUsingFunction(messages);  
    }  
    static void ExecuteOldUsingFunction(IEnumerable<string> lines)  
    {  
    using (var file = new StreamWriter("file.txt"))  
    {  
    foreach (string line in lines)  
    {  
    if (!line.Contains("C# 8"))  
    {  
    file.WriteLine(line);  
    }  
    }  
    } // file is disposed here automatically  
    }  
      
    static void ExecuteNewUsingFunction(IEnumerable<string> lines)  
    {  
    using var file = new StreamWriter("file.txt"); foreach (string line in lines)  
    {  
    if (!line.Contains("C# 8"))  
    {  
    file.WriteLine(line);  
    }  
    }  
    // file is disposed here automatically  
    }  

Как вы можете видеть в методе ExecuteNewUsingFunction, новое использование интуитивно понятно для работы.

В старом операторе using файл удаляется, когда достигается закрывающая скобка, связанная с использованием, однако в новом шаблоне файл удаляется, когда достигается закрывающая скобка для метода, поскольку это конец области для файла декларация. В обоих типах оператора using компилятор генерирует вызов Dispose () для очистки ресурсов, поэтому они считаются эквивалентными.

Члены структуры только для чтения

Теперь вы можете применять readonly к любым членам структуры. Это расширение добавления readonly в качестве уровня структуры. Это указывает на то, что член не изменяет данные и не модифицирует состояние. Эта функция помогает компилятору не создавать защитную копию переменной.

Давайте рассмотрим пример ниже, чтобы увидеть его в действии.

 


    public struct Distance  
    {  
    public double X { get; set; } public double Y { get; set; }  
    public double PointDistance => Math.Sqrt(X * X + Y * Y);  
    public readonly override string ToString() =>  
    $"({X}, {Y}) is {PointDistance} from the origin point";  
    }  

Приведенный выше код приводит к появлению следующего предупреждающего сообщения.

Csharp read only struct member

Компилятор генерирует предупреждение из-за свойства ToString при доступе к свойству PointDistance не создается как доступное только для чтения.

Чтобы исправить это предупреждение, просто установите свойство PointDistance readonly, как показано ниже.


    public readonly double PointDistance => Math.Sqrt(X * X + Y * Y);  

Добавляя readonly в свойство PointDistance, вы могли понять, что модификатор readonly необходим даже для свойств get, поскольку компилятор не предполагает, что методы доступа get не изменяют состояние. Эта функция позволяет четко указать намерение проекта, чтобы компилятор мог произвести необходимые оптимизации.

Резюме

В этой статье мы узнали о новой дерективе using и членах структуры, доступных только для чтения, а также о том, почему они необходимы. Мы прошли через это, чтобы понять, как новое объявление using упрощает синтаксис. Члены структуры, доступные только для чтения, также являются новым дополнением к структуре и помогают более четко разрабатывать намерение. Очевидно, что эти новые функции представляют собой большую ценность для разработчиков.