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 ... 56 57 58 59 60 61 62 63 64 ... 407
    Перейти на страницу:
    int Y;

      public readonly string Name;

      // Отобразить текущую позицию и название.

      public readonly void Display()

      {

        Console.WriteLine($"X = {X}, Y = {Y}, Name = {Name}");

      }

      // Специальный конструктор.

      public PointWithReadOnly(int xPos, int yPos, string name)

      {

        X = xPos;

        Y = yPos;

        Name = name;

      }

    }

    Для использования этой новой структуры добавьте к операторам верхнего уровня такой код:

    PointWithReadOnly p3 =

      new PointWithReadOnly(50,60,"Point w/RO");

    p3.Display();

    Использование структур ref (нововведение в версии 7.2)

    При определении структуры в C# 7.2 также появилась возможность применения модификатора ref. Он требует, чтобы все экземпляры структуры находились в стеке и не могли присваиваться свойству другого класса. Формальная причина для этого заключается в том, что ссылки на структуры ref из кучи невозможны. Отличие между стеком и кучей объясняется в следующем разделе.

    Ниже перечислены дополнительные ограничения структур ref:

    • их нельзя присваивать переменной типа object или dynamic, и они не могут быть интерфейсного типа;

    • они не могут реализовывать интерфейсы;

    • они не могут использоваться в качестве свойства структуры, не являющейся ref;

    • они не могут применяться в асинхронных методах, итераторах, лямбда-выражениях или локальных функциях.

    Показанный далее код, в котором создается простая структура и затем предпринимается попытка создать в этой структуре свойство, типизированное как структура ref, не скомпилируется;

    struct NormalPoint

    {

      // Этот код не скомпилируется.

      public PointWithRef PropPointer { get; set; }

    }

    Модификаторы readonly и ref можно сочетать для получения преимуществ и ограничений их обоих.

    Использование освобождаемых структур ref (нововведение в версии 8.0)

    Как было указано в предыдущем разделе, структуры ref (и структуры ref, допускающие только чтение) не могут реализовывать интерфейсы, а потому реализовать IDisposable нельзя. В версии C# 8.0 появилась возможность делать структуры ref и структуры ref, допускающие только чтение, освобождаемыми, добавляя открытый метод void Dispose().

    Добавьте в главный файл следующее определение структуры:

    ref struct DisposableRefStruct

    {

      public int X;

      public readonly int Y;

      public readonly void Display()

      {

        Console.WriteLine($"X = {X}, Y = {Y}");

      }

      // Специальный конструктор.

      public DisposableRefStruct(int xPos, int yPos)

      {

        X = xPos;

        Y = yPos;

        Console.WriteLine("Created!");   // Экземпляр создан!

      }

      public void Dispose()

      {

        // Выполнить здесь очистку любых ресурсов.

        Console.WriteLine("Disposed!");  // Экземпляр освобожден!

      }

    }

    Теперь поместите в конце операторов верхнего уровня приведенный ниже код, предназначенный для создания и освобождения новой структуры:

    var s = new DisposableRefStruct(50, 60);

    s.Display();

    s.Dispose();

    На заметку! Темы времени жизни и освобождения объектов раскрываются в главе 9.

    Чтобы углубить понимание выделения памяти в стеке и куче, необходимо ознакомиться с отличиями между типами значений и ссылочными типами .NET Core.

    Типы значений и ссылочные типы

    На заметку! В последующем обсуждении типов значений и ссылочных типов предполагается наличие у вас базовых знаний объектно-ориентированного программирования. Если это не так, тогда имеет смысл перейти к чтению раздела "Понятие типов С#, допускающих null" далее в главе и возвратиться к настоящему разделу после изучения глав 5 и 6.

    В отличие от массивов, строк и перечислений структуры C# не имеют идентично именованного представления в библиотеке .NET Core (т.е. класс вроде System.Structure отсутствует), но они являются неявно производными от абстрактного класса System.ValueType. Роль класса System.ValueType заключается в обеспечении размещения экземпляра производного типа (например, любой структуры) в стеке, а не в куче с автоматической сборкой мусора. Выражаясь просто, данные, размещаемые в стеке, могут создаваться и уничтожаться быстро, т.к. время их жизни определяется областью видимости, в которой они объявлены. С другой стороны, данные, размещаемые в куче, отслеживаются сборщиком мусора .NET Core и имеют время жизни, которое определяется многими факторами, объясняемыми в главе 9.

    С точки зрения функциональности единственное назначение класса System.ValueType — переопределение виртуальных методов, объявленных в классе System.Object, с целью использования семантики на основе значений, а не ссылок. Вероятно, вы уже знаете, что переопределение представляет собой процесс изменения реализации виртуального (или возможно абстрактного) метода, определенного внутри базового класса. Базовым классом для ValueType является System.Object. В действительности методы экземпляра, определенные в System.ValueType, идентичны методам экземпляра, которые определены в System.Object:

    // Структуры и перечисления неявно расширяют класс System.ValueType.

    public abstract class ValueType : object

    {

      public virtual bool Equals(object obj);

      public virtual int GetHashCode();

      public Type GetType();

      public virtual string ToString();

    }

    Учитывая, что типы значений применяют семантику на основе значений, время жизни структуры (что относится ко всем числовым типам данных (int, float), а также к любому перечислению или структуре) предсказуемо. Когда переменная типа структуры покидает область определения, она немедленно удаляется из памяти:

    // Локальные структуры извлекаются из стека,

    // когда метод возвращает управление.

    static void LocalValueTypes()

    {

      // Вспомните, что int - на самом деле структура System.Int32.

      int i = 0;

      // Вспомните, что Point - в действительности тип структуры.

      Point p = new Point();

    } // Здесь i и р покидают стек!

    Использование типов значений ссылочных типов и операции присваивания

    Когда переменная одного типа значения присваивается переменной другого типа значения, выполняется почленное копирование полей данных. В случае простого типа данных, такого как System.Int32, единственным копируемым членом будет числовое значение. Однако для типа Point в новую переменную структуры будут копироваться значения полей X и Y. В целях демонстрации создайте новый проект консольного приложения по имени FunWithValueAndReferenceTypes и скопируйте предыдущее определение Point в новое пространство имен, после чего

    1 ... 56 57 58 59 60 61 62 63 64 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

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


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

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

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


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

    Новые отзывы

    1. Лариса Лариса04 июнь 12:43 Да, просто до слез похоже на сериал ,,Даррел,,... Смерть в райском уголке - Эмили Салливан
    2. Stmara Stmara02 июнь 22:44 Приятная история, чтобы скоротать вечер. Любимая книга из последних "Любовь со смертью", также очень понравилась -"Суженная... Сердце космического дракона - Ольга Вадимовна Гусейнова
    3. Alex Alex01 июнь 17:12 💩💩💩🖕🖕🖕🖕🖕🖕🖕... Игровой момент II - Александр Андреевич Бодров
    Все комметарии
    Новинки бесплатной онлайн библиотеки