C# 10 in a Nutshell: The Definitive Reference by Joseph Albahari
https://csharpcooking.github.io/theory/AlbahariCSharp10En.pdf
#программирование #сишарп #csharp
https://csharpcooking.github.io/theory/AlbahariCSharp10En.pdf
#программирование #сишарп #csharp
Двоичное представление decimal числа состоит из 1-битового знака, 96-битового целого числа и коэффициента масштабирования, используемого для деления целочисленного числа и указания его части десятичной дроби. Коэффициент масштабирования неявно представляет собой число 10, возведенное в степень в диапазоне от 0 до 28.
Таким образом, decimal число можно представить массивом m, который состоит из четырех 32-разрядных элементов, где:
📌 m[0], m[1] и m[2] содержат младшие, средние и высшие разряды 96-разрядного целого числа.
📌 m[3]:
- 0-15 не используются;
- 16-23 (8 бит) содержать экспоненту от 0 до 28, что указывает на степень 10 для деления целочисленного числа;
- 24-30 не используются;
- 31 содержит знак (0 означает положительное значение, а 1 — отрицательное).
#программирование #сишарп #csharp
Таким образом, decimal число можно представить массивом m, который состоит из четырех 32-разрядных элементов, где:
📌 m[0], m[1] и m[2] содержат младшие, средние и высшие разряды 96-разрядного целого числа.
📌 m[3]:
- 0-15 не используются;
- 16-23 (8 бит) содержать экспоненту от 0 до 28, что указывает на степень 10 для деления целочисленного числа;
- 24-30 не используются;
- 31 содержит знак (0 означает положительное значение, а 1 — отрицательное).
#программирование #сишарп #csharp
❤1👍1
Stephen Toub (2010). Patterns of parallel programming. Microsoft Corporation
https://csharpcooking.github.io/theory/Patterns-of-Parallel-Programming-CSharp.pdf
#программирование #сишарп #csharp
https://csharpcooking.github.io/theory/Patterns-of-Parallel-Programming-CSharp.pdf
#программирование #сишарп #csharp
Joe Mayo (2022). C# Cookbook: Modern Recipes for Professional Developers
https://csharpcooking.github.io/theory/JoeMayoCSharpCookbook.pdf
#программирование #сишарп #csharp
https://csharpcooking.github.io/theory/JoeMayoCSharpCookbook.pdf
#программирование #сишарп #csharp
Многопоточность может повысить производительность в приложениях Windows Presentation Foundation (WPF), Universal Windows Platform (UWP) и Windows Forms, но доступ к элементам управления не является потокобезопасным. Не потокобезопасный код может стать причиной для серьезных и сложных ошибок. Два или более потока, оказывающих влияние на элемент управления, могут привести к нестабильному состоянию приложения и вызвать условия состязаний. Данный пост посвящен раскрытию темы вызова элементов управления пользовательского интерфейса потокобезопасным образом, в частности объяснению понятия “контекст синхронизации”.
https://csharpcooking.github.io/2023/02/18/Thread-Safe-Control-Calls.html
#программирование #сишарп #csharp
https://csharpcooking.github.io/2023/02/18/Thread-Safe-Control-Calls.html
#программирование #сишарп #csharp
CSharpCooking
Потокобезопасные вызовы элементов управления в приложениях WPF, UWP и Windows Forms
Многопоточность может повысить производительность в приложениях Windows Presentation Foundation (WPF), Universal Windows Platform (UWP) и Windows Forms, но доступ к элементам управления не является потокобезопасным. Не потокобезопасный код может стать причиной…
Media is too big
VIEW IN TELEGRAM
Создание и запуск задач. TaskCreationOptions и дочерние задачи.
📌 CSharpCooking.github.io/2022/02/27/Task-Scheduler.html
#программирование #сишарп #csharp
📌 CSharpCooking.github.io/2022/02/27/Task-Scheduler.html
#программирование #сишарп #csharp
Преимущества параллельного программирования: увеличение производительности, распределение нагрузки, обработка больших объемов данных, улучшение отзывчивости и др. Однако параллельное программирование также может иметь свои сложности, связанные с управлением синхронизацией, гонками данных и другими аспектами, которые требуют дополнительного внимания и опыта со стороны программиста. В ходе тестирования параллельных программ можно получить неоднозначные результаты. Например, это может происходить, когда мы оптимизируем объединение данных типа float или double посредством методов For или ForEach класса Parallel. Подобное поведение программы заставляет усомниться в потокобезопасности написанного кода. Пост раскрывает возможную причину неоднозначности результатов, получаемых параллельной программой, и предлагает лаконичное решение вопроса.
https://csharpcooking.github.io/2023/03/22/Ambiguous-Results-when-Using-Parallel-Class-Methods-within-the-NET-Framework-Runtime.html
#программирование #сишарп #csharp
https://csharpcooking.github.io/2023/03/22/Ambiguous-Results-when-Using-Parallel-Class-Methods-within-the-NET-Framework-Runtime.html
#программирование #сишарп #csharp
Вопрос:
Доступны ли COM-объекты в Linux?
Ответ:
COM (Component Object Model) — это технология, разработанная компанией Microsoft для взаимодействия объектов в рамках одного процесса или между процессами, а также взаимодействия между компьютерами в сети. Эта технология является основой для многих других технологий Microsoft, включая OLE, OLE Automation, Browser Helper Object, ActiveX, COM+, DCOM, Windows Shell, DirectX и многих других.
Все эти технологии являются частью операционной системы Windows, и они не поддерживаются в Linux нативно. Однако, есть несколько подходов, которые позволяют работать с COM-объектами в Linux:
1. Wine — это слой совместимости, позволяющий запускать приложения Windows на различных POSIX-совместимых операционных системах, таких как Linux, macOS и BSD. Он имитирует WinAPI на уровне системных вызовов.
2. Mono — это кросс-платформенная реализация .NET Framework, которая поддерживает большинство функциональных возможностей .NET, и некоторые из них могут использоваться для взаимодействия с COM-объектами.
3. Виртуальные машины или контейнеры (например, Docker с Windows контейнерами) — это еще один подход, который позволяет запускать приложения Windows в Linux.
Обратите внимание, что все эти подходы имеют свои ограничения, и не все COM-объекты могут работать корректно в Linux даже с использованием этих методов.
#программирование #сишарп #csharp
Доступны ли COM-объекты в Linux?
Ответ:
COM (Component Object Model) — это технология, разработанная компанией Microsoft для взаимодействия объектов в рамках одного процесса или между процессами, а также взаимодействия между компьютерами в сети. Эта технология является основой для многих других технологий Microsoft, включая OLE, OLE Automation, Browser Helper Object, ActiveX, COM+, DCOM, Windows Shell, DirectX и многих других.
Все эти технологии являются частью операционной системы Windows, и они не поддерживаются в Linux нативно. Однако, есть несколько подходов, которые позволяют работать с COM-объектами в Linux:
1. Wine — это слой совместимости, позволяющий запускать приложения Windows на различных POSIX-совместимых операционных системах, таких как Linux, macOS и BSD. Он имитирует WinAPI на уровне системных вызовов.
2. Mono — это кросс-платформенная реализация .NET Framework, которая поддерживает большинство функциональных возможностей .NET, и некоторые из них могут использоваться для взаимодействия с COM-объектами.
3. Виртуальные машины или контейнеры (например, Docker с Windows контейнерами) — это еще один подход, который позволяет запускать приложения Windows в Linux.
Обратите внимание, что все эти подходы имеют свои ограничения, и не все COM-объекты могут работать корректно в Linux даже с использованием этих методов.
#программирование #сишарп #csharp
👨💻1
Вопрос:
В чем разница между типами int и nint?
Ответ:
Типы int и nint в C# представляют собой целочисленные типы данных, но они имеют несколько различий.
int – это стандартный целочисленный тип данных в C#, который представляет 32-битное знаковое целое число. Он может содержать значения от -2,147,483,648 до 2,147,483,647.
nint, с другой стороны, является новым типом данных, введенным в C# 9.0, и представляет собой целое число размером с указатель. Он предназначен для совместимости с размерами в нативном коде и может быть 32-битным на 32-битных платформах и 64-битным на 64-битных платформах.
Тип nint является частью набора новых типов данных (включая nuint и nfloat), которые предназначены для упрощения работы с нативными API, особенно в контекстах, где размеры данных могут варьироваться в зависимости от платформы.
Важно отметить, что nint и другие нативные целочисленные типы используются в специфических сценариях и не предназначены для общего использования в большинстве приложений C#. Для большинства приложений стандартные числовые типы данных C#, такие как int, long, float, double и т.д., остаются наиболее подходящими.
Типы nint и nuint в C# были введены для упрощения работы с платформозависимыми или нативными API, где размер целочисленных значений может быть разным в зависимости от архитектуры процессора (32-битный или 64-битный). Эти типы представляют целые числа, размер которых соответствует размеру указателя в данной системе.
Большинство приложений C# не имеют непосредственной необходимости в такой платформозависимой функциональности. Стандартные числовые типы, такие как int, long, float, double и т.д., уже предоставляют абстракцию для работы с числами, не зависящую от платформы, и они хорошо подходят для большинства задач.
Использование nint и nuint в общих приложениях может привести к путанице и сложностям в поддержке кода, так как поведение этих типов может меняться в зависимости от платформы. Кроме того, возможно, вам придется столкнуться с вопросами совместимости, если ваши данные переходят между различными архитектурами.
В общем, nint и nuint следует использовать только в тех случаях, когда это действительно необходимо для взаимодействия с нативным кодом или API, которые зависят от размера указателя.
#программирование #сишарп #csharp
В чем разница между типами int и nint?
Ответ:
Типы int и nint в C# представляют собой целочисленные типы данных, но они имеют несколько различий.
int – это стандартный целочисленный тип данных в C#, который представляет 32-битное знаковое целое число. Он может содержать значения от -2,147,483,648 до 2,147,483,647.
nint, с другой стороны, является новым типом данных, введенным в C# 9.0, и представляет собой целое число размером с указатель. Он предназначен для совместимости с размерами в нативном коде и может быть 32-битным на 32-битных платформах и 64-битным на 64-битных платформах.
Тип nint является частью набора новых типов данных (включая nuint и nfloat), которые предназначены для упрощения работы с нативными API, особенно в контекстах, где размеры данных могут варьироваться в зависимости от платформы.
Важно отметить, что nint и другие нативные целочисленные типы используются в специфических сценариях и не предназначены для общего использования в большинстве приложений C#. Для большинства приложений стандартные числовые типы данных C#, такие как int, long, float, double и т.д., остаются наиболее подходящими.
Типы nint и nuint в C# были введены для упрощения работы с платформозависимыми или нативными API, где размер целочисленных значений может быть разным в зависимости от архитектуры процессора (32-битный или 64-битный). Эти типы представляют целые числа, размер которых соответствует размеру указателя в данной системе.
Большинство приложений C# не имеют непосредственной необходимости в такой платформозависимой функциональности. Стандартные числовые типы, такие как int, long, float, double и т.д., уже предоставляют абстракцию для работы с числами, не зависящую от платформы, и они хорошо подходят для большинства задач.
Использование nint и nuint в общих приложениях может привести к путанице и сложностям в поддержке кода, так как поведение этих типов может меняться в зависимости от платформы. Кроме того, возможно, вам придется столкнуться с вопросами совместимости, если ваши данные переходят между различными архитектурами.
В общем, nint и nuint следует использовать только в тех случаях, когда это действительно необходимо для взаимодействия с нативным кодом или API, которые зависят от размера указателя.
#программирование #сишарп #csharp
👍1
Вопрос:
В чем полезность записей (record)?
Ответ:
Записи (records) в C# — это тип данных, который представляет собой неизменяемый (immutable) тип ссылки и предоставляет функционал семантического сравнения значений. Другими словами, записи предоставляют способ определить типы данных, которые ведут себя больше как значения, чем как объекты.
Вот некоторые преимущества использования записей:
1. Неизменяемость: Записи являются неизменяемыми по умолчанию, что делает их безопасными для использования в многопоточных окружениях и упрощает понимание их поведения.
2. Семантическое сравнение: Записи поддерживают семантическое сравнение значений. Это означает, что две записи с одинаковыми значениями будут считаться равными, даже если они являются разными объектами.
3. Упрощение кода: Записи в C# 9.0 и новее поддерживают синтаксис инициализации, который позволяет легко создавать новые экземпляры записей с измененными значениями. Это также помогает уменьшить количество шаблонного кода, которое необходимо написать.
4. Встроенные методы: Записи автоматически генерируют полезные методы, такие как Equals, GetHashCode, ToString и операторы сравнения, основываясь на свойствах записи.
Вот пример использования записи:
#программирование #сишарп #csharp
В чем полезность записей (record)?
Ответ:
Записи (records) в C# — это тип данных, который представляет собой неизменяемый (immutable) тип ссылки и предоставляет функционал семантического сравнения значений. Другими словами, записи предоставляют способ определить типы данных, которые ведут себя больше как значения, чем как объекты.
Вот некоторые преимущества использования записей:
1. Неизменяемость: Записи являются неизменяемыми по умолчанию, что делает их безопасными для использования в многопоточных окружениях и упрощает понимание их поведения.
2. Семантическое сравнение: Записи поддерживают семантическое сравнение значений. Это означает, что две записи с одинаковыми значениями будут считаться равными, даже если они являются разными объектами.
3. Упрощение кода: Записи в C# 9.0 и новее поддерживают синтаксис инициализации, который позволяет легко создавать новые экземпляры записей с измененными значениями. Это также помогает уменьшить количество шаблонного кода, которое необходимо написать.
4. Встроенные методы: Записи автоматически генерируют полезные методы, такие как Equals, GetHashCode, ToString и операторы сравнения, основываясь на свойствах записи.
Вот пример использования записи:
public record Person(string FirstName, string LastName);В этом примере Person является записью с двумя свойствами: FirstName и LastName. Эти свойства автоматически получают методы get, и их значения устанавливаются при создании объекта Person. Поскольку Person является записью, она также автоматически получает реализации методов Equals, GetHashCode, ToString и операторов сравнения.
#программирование #сишарп #csharp