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

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

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

178 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 ... 73 74 75 76 77 78 79 80 81 ... 407
    Перейти на страницу:
    Использовать методы get/set для взаимодействия

    // с именем сотрудника, представленного объектом.

    emp.SetName("Marv");

    Console.WriteLine("Employee is named: {0}", emp.GetName());

    Console.ReadLine();

    Благодаря коду в методе SetName() попытка указать для имени строку, содержащую более 15 символов (как показано ниже), приводит к выводу на консоль жестко закодированного сообщения об ошибке:

    Console.WriteLine("***** Fun with Encapsulation *****n");

    ...

    // Длиннее 15 символов! На консоль выводится сообщение об ошибке.

    Employee emp2 = new Employee();

    emp2.SetName("Xena the warrior princess");

    Console.ReadLine();

    Пока все идет хорошо. Мы инкапсулировали закрытое поле empName с использованием двух открытых методов с именами GetName() и SetName(). Для дальнейшей инкапсуляции данных в классе Employee понадобится добавить разнообразные дополнительные методы (такие как GetID(), SetID(), GetCurrentPay(), SetCurrentPay()). В каждом методе, изменяющем данные, может содержаться несколько строк кода, в которых реализована проверка дополнительных бизнес-правил. Несмотря на то что это определенно достижимо, для инкапсуляции данных класса в языке C# имеется удобная альтернативная система записи.

    Инкапсуляция с использованием свойств

    Хотя инкапсулировать поля данных можно с применением традиционной пары методов get и set, в языках .NET Core предпочтение отдается обеспечению инкапсуляции данных с использованием свойств. Прежде всего, имейте в виду, что свойства — всего лишь контейнер для "настоящих" методов доступа и изменения, именуемых get и set соответственно. Следовательно, проектировщик класса по-прежнему может выполнить любую внутреннюю логику перед присваиванием значения (например, преобразовать в верхний регистр, избавиться от недопустимых символов, проверить вхождение внутрь границ и т.д.).

    Ниже приведен измененный код класса Employee, который теперь обеспечивает инкапсуляцию каждого поля с использованием синтаксиса свойств вместо традиционных методов get и set.

    class Employee

    {

      // Поля данных.

      private string _empName;

      private int _empId;

      private float _currPay;

      // Свойства!

      public string Name

      {

        get { return _empName; }

        set

        {

          if (value.Length > 15)

          {

            Console.WriteLine("Error! Name length exceeds 15 characters!");

                            // Ошибка! Длина имени превышает 15 символов!

          }

          else

          {

            _empName = value;

          }

        }

      }

      // Можно было бы добавить дополнительные бизнес-правила для установки

      // данных свойств, но в настоящем примере в этом нет необходимости.

      public int Id

      {

        get { return _empId; }

        set { _empId = value; }

      }

      public float Pay

      {

        get { return _currPay; }

        set { _currPay = value; }

      }

    ...

    }

    Свойство C# состоит из определений областей get (метод доступа) и set (метод изменения) прямо внутри самого свойства. Обратите внимание, что свойство указывает тип инкапсулируемых им данных способом, который выглядит как возвращаемое значение. Кроме того, в отличие от метода при определении свойства не применяются круглые скобки (даже пустые). Взгляните на следующий комментарий к текущему свойству Id:

    // int представляет тип данных, инкапсулируемых этим свойством.

    public int Id // Обратите внимание на отсутствие круглых скобок.

    {

      get { return _empId; }

      set { _empID = value; }

    }

    В области видимости set свойства используется лексема value, которая представляет входное значение, присваиваемое свойству вызывающим кодом. Лексема value не является настоящим ключевым словом С#, а представляет собой то, что называется контекстным ключевым словом. Когда лексема value находится внутри области set, она всегда обозначает значение, присваиваемое вызывающим кодом, и всегда имеет тип, совпадающий с типом самого свойства. Таким образом, вот как свойство Name может проверить допустимую длину строки:

    public string Name

    {

      get { return _empName; }

      set

      {

        // Здесь value на самом деле имеет тип string.

        if (value.Length > 15)

        {   Console.WriteLine("Error! Name length exceeds 15 characters!");

                            // Ошибка! Длина имени превышает 15 символов!

        }

        else

        {

          empName = value;

        }

      }

    }

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

    Console.WriteLine("***** Fun with Encapsulation *****n");

    Employee emp = new Employee("Marvin", 456, 30000);

    emp.GiveBonus(1000);

    emp.DisplayStats();

    // Переустановка и аатем получение свойства Name.

    emp.Name = "Marv";

    Console.WriteLine("Employee is named: {0}", emp.Name); // имя сотрудника

    Console.ReadLine();

    Свойства (как противоположность методам доступа и изменения) также облегчают манипулирование типами, поскольку способны реагировать на внутренние операции С#. В целях иллюстрации будем считать, что тип класса Employee имеет внутреннюю закрытую переменную-член, представляющую возраст сотрудника. Ниже показаны необходимые изменения (обратите внимание на применение цепочки вызовов конструкторов):

    class Employee

    {

       ...

       // Новое поле и свойство.

       private int _empAge;

       public int Age

       {

         get { return _empAge; }

         set { _empAge = value; }

       }

       // Обновленные конструкторы.

       public Employee() {}

       public Employee(string name, int id, float pay)

       :this(name, 0, id, pay){}

       public Employee(string name, int age, int id, float pay)

       {

         _empName = name;

         _empId = id;

         _empAge = age;

         _currPay = pay;

       }

       // Обновленный метод DisplayStats() теперь учитывает возраст.

       public void DisplayStats()

       {

         Console.WriteLine("Name: {0}", _empName); // имя сотрудника

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

                         // идентификационный номер сотрудника

         Console.WriteLine("Age: {0}", _empAge);   // возраст сотрудника

         Console.WriteLine("Pay: {0}", _currPay);  // текущая выплата

       }

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

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


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

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

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


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

    Новые отзывы

    1. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    2. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    3. Елена Елена08 июнь 11:13 Прочла несколько романов этого, без сомнения, талантливого автора. Впечатление прекрасное, но хотелось бы когда-нибудь прочесть... Предатель. Ты врал мне годами - Арина Арская
    Все комметарии
    Новинки бесплатной онлайн библиотеки