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 ... 147 148 149 150 151 152 153 154 155 ... 407
    Перейти на страницу:
    в языке C++ . Если это не так, тогда можете спокойно пропустить данную тему. В большинстве приложений C# указатели не используются.

    В главе 4 вы узнали, что в рамках платформы .NET Core определены две крупные категории данных: типы значений и ссылочные типы. По правде говоря, на самом деле есть еще и третья категория: типы указателей. Для работы с типами указателей доступны специфичные операции и ключевые слова (табл. 11.2), которые позволяют обойти схему управления памятью исполняющей среды .NET 5 и взять дело в свои руки.

    Перед погружением в детали следует еще раз подчеркнуть, что вам очень редко, если вообще когда-нибудь, понадобится использовать типы указателей. Хотя C# позволяет опуститься на уровень манипуляций указателями, помните, что исполняющая среда .NET Core не имеет абсолютно никакого понятия о ваших намерениях. Соответственно, если вы неправильно управляете указателем, то сами и будете отвечать за последствия. С учетом этих предупреждений возникает вопрос: когда в принципе может возникнуть необходимость работы с типами указателей? Существуют две распространенные ситуации.

    • Нужно оптимизировать избранные части приложения, напрямую манипулируя памятью за рамками ее управления со стороны исполняющей среды .NET 5.

    • Необходимо вызывать методы из DLL-библиотеки, написанной на С, либо из сервера СОМ, которые требуют передачи типов указателей в качестве параметров. Но даже в таком случае часто можно обойтись без применения типов указателей, отдав предпочтение типу System.IntPtr и членам типа System.Runtime.InteropServices.Marshal.

    Если вы решили задействовать данное средство языка С#, тогда придется информировать компилятор C# о своих намерениях, разрешив проекту поддерживать "небезопасный код". Создайте новый проект консольного приложения по имени UnsafeCode и включите поддержку небезопасного кода, добавив в файл UnsafeCode.csproj следующие строки:

    <PropertyGroup>

      <AllowUnsafeBlocks>true</AllowUnsafeBlocks>

    </PropertyGroup>

    Для установки этого свойства в Visual Studio предлагается графический пользовательский интерфейс. Откройте окно свойств проекта. В раскрывающемся списке Configuration (Конфигурация) выберите вариант All Configurations (Все конфигурации), перейдите на вкладку Build (Сборка) и отметьте флажок Allow unsafe code (Разрешить небезопасный код), как показано на рис. 11.1.

    Ключевое слово unsafe

    Для работы с указателями в C# должен быть специально объявлен блок "небезопасного кода" с использованием ключевого слова unsafe (любой код, который не помечен ключевым словом unsafe, автоматически считается "безопасным"). Например, в следующем файле Program.cs объявляется область небезопасного кода внутри операторов верхнего уровня:

    using System;

    using UnsafeCode;

    Console.WriteLine("***** Calling method with unsafe code *****");

    unsafe

    {

      // Здесь работаем с указателями!

    }

    // Здесь работа с указателями невозможна!

    В дополнение к объявлению области небезопасного кода внутри метода можно строить "небезопасные" структуры, классы, члены типов и параметры. Ниже приведено несколько примеров (типы Node и Node2 в текущем проекте определять не нужно):

    // Эта структура целиком является небезопасной и может

    // использоваться только в небезопасном контексте.

    unsafe struct Node

    {

      public int Value;

      public Node* Left;

      public Node* Right;

    }

    // Эта структура безопасна, но члены Node2* - нет.

    // Формально извне небезопасного контекста можно

    // обращаться к Value, но не к Left и Right.

    public struct Node2

    {

      public int Value;

      // Эти члены доступны только в небезопасном контексте!

      public unsafe Node2* Left;

      public unsafe Node2* Right;

    }

    Методы (статические либо уровня экземпляра) также могут быть помечены как небезопасные. Предположим, что какой-то статический метод будет использовать логику указателей. Чтобы обеспечить возможность вызова данного метода только из небезопасного контекста, его можно определить так:

    static unsafe void SquareIntPointer(int* myIntPointer)

    {

      // Возвести значение в квадрат просто для тестирования.

      *myIntPointer *= *myIntPointer;

    }

    Конфигурация метода требует, чтобы вызывающий код обращался к методу SquareIntPointer() следующим образом:

    unsafe

    {

      int myInt = 10;

      // Нормально, мы находимся в небезопасном контексте.

      SquareIntPointer(&myInt);

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

    }

    int myInt2 = 5;

    // Ошибка на этапе компиляции!

    // Это должно делаться в небезопасном контексте!

    SquareIntPointer(&myInt2);

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

    Если вы не хотите вынуждать вызывающий код помещать такой вызов внутрь небезопасного контекста, то можете поместить все операторы верхнего уровня в блок unsafe. При использовании в качестве точки входа метода Main() можете пометить Main() ключевым словом unsafe. В таком случае приведенный ниже код скомпилируется:

    static unsafe void Main(string[] args)

    {

      int myInt2 = 5;

      SquareIntPointer(&myInt2);

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

    }

    Запустив такую версию кода, вы получите следующий вывод:

    myInt: 25

    На заметку! Важно отметить, что термин "небезопасный" был выбран небезосновательно. Прямой доступ к стеку и работа с указателями может приводить к неожиданным проблемам с вашим приложением, а также с компьютером, на котором оно функционирует. Если вам приходится иметь дело с небезопасным кодом, тогда будьте крайне внимательны.

    Работа с операциями * и &

    После установления небезопасного контекста можно строить указатели и типы данных с помощью операции *, а также получать адрес указываемых данных посредством операции &. В отличие от С или C++ в языке C# операция * применяется только к лежащему в основе типу, а не является префиксом имени каждой переменной указателя. Например, взгляните на показанный далее код, демонстрирующий правильный и неправильный способы объявления указателей на целочисленные переменные:

    // Нет! В C# это некорректно!

    int *pi, *pj;

    // Да! Так поступают в С#.

    int* pi, pj;

    Рассмотрим следующий небезопасный метод:

    static unsafe void PrintValueAndAddress()

    {

      int myInt;

      // Определить указатель на int и присвоить ему адрес myInt.

      int* ptrToMyInt = &myInt;

      // Присвоить значение myInt, используя обращение через указатель.

      *ptrToMyInt = 123;

      // Вывести некоторые значения.

      Console.WriteLine("Value of myInt {0}", myInt);

                      //

    1 ... 147 148 149 150 151 152 153 154 155 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

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


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

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

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


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

    Новые отзывы

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