LoveRead.info » Книги » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

177 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

Книга Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читать онлайн бесплатно без регистрации

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле. Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных. Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

    1 ... 76 77 78 79 80 81 82 83 84 ... 407
    Перейти на страницу:
    проходить по всем частям определения и заполнять необходимые детали. Испытайте описанный прием.

    При определении автоматического свойства вы просто указываете модификатор доступа, лежащий в основе тип данных, имя свойства и пустые области get/set. Во время компиляции тип будет оснащен автоматически сгенерированным поддерживающим полем и подходящей реализацией логики get/set.

    На заметку! Имя автоматически сгенерированного закрытого поддерживающего поля будет невидимым для вашей кодовой базы С#. Просмотреть его можно только с помощью инструмента вроде ildasm.exe.

    Начиная с версии C# 6, разрешено определять "автоматическое свойство только для чтения", опуская область set. Автоматические свойства только для чтения можно устанавливать только в конструкторе. Тем не менее, определять свойство, предназначенное только для записи, нельзя. Вот пример:

    // Свойство только для чтения? Допустимо!

    public int MyReadOnlyProp { get; }

    // Свойство только для записи? Ошибка!

    public int MyWriteOnlyProp { set; }

    Взаимодействие с автоматическими свойствами

    Поскольку компилятор будет определять закрытые поддерживающие поля на этапе компиляции (и учитывая, что эти поля в коде C# непосредственно не доступны), в классе, который имеет автоматические свойства, для установки и чтения лежащих в их основе значений всегда должен применяться синтаксис свойств. Указанный факт важно отметить, т.к. многие программисты напрямую используют закрытые поля внутри определения класса, что в данном случае невозможно. Например, если бы класс Car содержал метод DisplayStats(), то в его реализации пришлось бы применять имена свойств:

    class Car

    {

       // Автоматические свойства!

       public string PetName { get; set; }

       public int Speed { get; set; }

       public string Color { get; set; }

       public void DisplayStats()

       {

         Console.WriteLine("Car Name: {0}", PetName);

         Console.WriteLine("Speed: {0}", Speed);

         Console.WriteLine("Color: {0}", Color);

       }

    }

    При использовании экземпляра класса, определенного с автоматическими свойствами, присваивать и получать значения можно с помощью вполне ожидаемого синтаксиса свойств:

    using System;

    using AutoProps;

    Console.WriteLine("***** Fun with Automatic Properties *****n");

    Car c = new Car();

    c.PetName = "Frank";

    c.Speed = 55;

    c.Color = "Red";

    Console.WriteLine("Your car is named {0}? That's odd...",

                       c.PetName);

    c.DisplayStats();

    Console.ReadLine();

    Автоматические свойства и стандартные значения

    Когда автоматические свойства применяются для инкапсуляции числовых и булевских данных, их можно использовать прямо внутри кодовой базы, т.к. скрытым поддерживающим полям будут присваиваться безопасные стандартные значения (false для булевских и 0 для числовых данных). Но имейте в виду, что когда синтаксис автоматического свойства применяется для упаковки переменной другого класса, то скрытое поле ссылочного типа также будет установлено в стандартное значение null (и это может привести к проблеме, если не проявить должную осторожность).

    Добавьте к текущему проекту новый файл класса по имени Garage (представляющий гараж), в котором используются два автоматических свойства (разумеется, реальный класс гаража может поддерживать коллекцию объектов Car; однако в данный момент проигнорируем такую деталь):

    namespace AutoProps

    {

      class Garage

      {

         // Скрытое поддерживающее поле int установлено в О!

         public int NumberOfCars { get; set; }

         // Скрытое поддерживающее поле Car установлено в null!

         public Car MyAuto { get; set; }

      }

    }

    Имея стандартные значения C# для полей данных, значение NumberOfCars можно вывести в том виде, как есть (поскольку ему автоматически присвоено значение 0). Но если напрямую обратиться к MyAuto, то во время выполнения сгенерируется исключение ссылки на null, потому что лежащей в основе переменной-члену типа Car не был присвоен новый объект.

    Garage g = new Garage();

    // Нормально, выводится стандартное значение 0.

    Console.WriteLine("Number of Cars: {0}", g.NumberOfCars);

    // Ошибка во время выполнения!

    // Поддерживающее поле в данный момент равно null!

    Console.WriteLine(g.MyAuto.PetName);

    Console.ReadLine();

    Чтобы решить проблему, можно модифицировать конструкторы класса, обеспечив безопасное создание объекта. Ниже показан пример:

    class Garage

    {

       // Скрытое поддерживающее поле установлено в 0!

       public int NumberOfCars { get; set; }

       // Скрытое поддерживающее поле установлено в null!

       public Car MyAuto { get; set; }

       // Для переопределения стандартных значений, присвоенных скрытым

       // поддерживающим полям, должны использоваться конструкторы.

       public Garage()

       {

         MyAuto = new Car();

         NumberOfCars = 1;

       }

       public Garage(Car car, int number)

       {

         MyAuto = car;

         NumberOfCars = number;

       }

    }

    После такого изменения объект Car теперь можно помещать в объект Garage:

    Console.WriteLine("***** Fun with Automatic Properties *****n");

    // Создать объект автомобиля.

    Car c = new Car();

    c.PetName = "Frank";

    c.Speed = 55;

    c.Color = "Red";

    c.DisplayStats();

    // Поместить автомобиль в гараж.

    Garage g = new Garage();

    g.MyAuto = c;

    // Вывести количество автомобилей в гараже

    Console.WriteLine("Number of Cars in garage: {0}", g.NumberOfCars);

    // Вывести название автомобиля.

    Console.WriteLine("Your car is named: {0}", g.MyAuto.PetName);

    Console.ReadLine();

    Инициализация автоматических свойств

    Наряду с тем, что предыдущий подход работает вполне нормально, в версии C# 6 появилась языковая возможность, которая содействует упрощению способа присваивания автоматическим свойствам их начальных значений. Как упоминалось ранее в главе, полю данных в классе можно напрямую присваивать начальное значение при его объявлении. Например:

    class Car

    {

      private int numberOfDoors = 2;

    }

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

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

    class Garage

    1 ... 76 77 78 79 80 81 82 83 84 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Елена Елена07 июнь 20:15 Хорошо написанный,увлекательный роман, как, впрочем, и остальные произведения этого автора.... Развод. Ты меня предал - Арина Арская
    2. Лариса Лариса04 июнь 12:43 Да, просто до слез похоже на сериал ,,Даррел,,... Смерть в райском уголке - Эмили Салливан
    3. Stmara Stmara02 июнь 22:44 Приятная история, чтобы скоротать вечер. Любимая книга из последних "Любовь со смертью", также очень понравилась -"Суженная... Сердце космического дракона - Ольга Вадимовна Гусейнова
    Все комметарии
    Новинки бесплатной онлайн библиотеки