Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю Страница 230
- Категория: Компьютеры и Интернет / Базы данных
- Автор: Троелсен Эндрю
- Страниц: 642
- Добавлено: 2023-08-26 14:00:22
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту pbn.book@yandex.ru для удаления материала
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю краткое содержание
Прочтите описание перед тем, как прочитать онлайн книгу «Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю» бесплатно полную версию:В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле.
Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных.
Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю читать онлайн бесплатно

Перед погружением в детали следует еще раз подчеркнуть, что вам очень редко, если вообще когда-нибудь, понадобится использовать типы указателей. Хотя 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
{
// Здесь работаем с указателями!
}
// Здесь работа с указателями невозможна!
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})В дополнение к объявлению области небезопасного кода внутри метода можно строить "небезопасные" структуры, классы, члены типов и параметры. Ниже приведено несколько примеров (типы 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 <b>unsafe</b> void SquareIntPointer(int* myIntPointer)
{
// Возвести значение в квадрат просто для тестирования.
*myIntPointer *= *myIntPointer;
}
Конфигурация метода требует, чтобы вызывающий код обращался к методу SquareIntPointer() следующим образом:
unsafe
{
int myInt = 10;
<b> // Нормально, мы находимся в небезопасном контексте.</b>
SquareIntPointer(&myInt);
Console.WriteLine("myInt: {0}", myInt);
}
int myInt2 = 5;
<b>// Ошибка на этапе компиляции!</b>
<b>// Это должно делаться в небезопасном контексте!</b>
SquareIntPointer(&myInt2);
Console.WriteLine("myInt: {0}", myInt2);
Если вы не хотите вынуждать вызывающий код помещать такой вызов внутрь небезопасного контекста, то можете поместить все операторы верхнего уровня в блок unsafe. При использовании в качестве точки входа метода Main() можете пометить Main() ключевым словом unsafe. В таком случае приведенный ниже код скомпилируется:
Жалоба
Напишите нам, и мы в срочном порядке примем меры.