Что выведет на экран этот код?
Anonymous Quiz
7%
Base.Foo(int)
64%
Derived.Foo(int)
20%
Derived.Foo(object)
9%
Derived.Foo(int) Base.Foo(int)
Какой метод быстрее?
Anonymous Quiz
29%
Method1
16%
Method2
56%
Одинаковые по скорости (отклонение меньше 5%)
🔥 Дайджест полезных материалов из мира C# за неделю
Почитать:
— Книга «Blazor в действии» в правильном переводе команды DotNetRu
— Гуманитарий с 0 знаний в программировании. 3 часть. Первые шаги в C# (и слегка Unity)
— Использование расширения VS Code «PVS-Studio» для эффективной борьбы с ошибками в C# коде
— Оплата в Telegram | API Yoomoney С#
— EF Core. Как 1 строчка может добавить x4 к быстродействию запросов к БД?
— Дизайним абилки как в X-COM
— .NET 7 против российской криптографии. Часть 2. Штампы времени
— Как я писала программу на C#, которая шифрует текст по принципу «Квадрат Полибия»
— Как провести курс для разработчиков (за 1.5 млн) в маленькой компании и не сойти с ума
— Microsoft PowerToys: Король GitHub среди C# проектов с C++ ошибками
— From MS-Access to EF Core (C#)
— Explorando el Mundo de los Archivos de Recurso en C# con Visual Studio
— C# - Reducing Lock Contention with ReaderWriterLockSlim
— Game Dev Digest — Issue #212 - Parody, Performance, Modeling and more
— Building a Data Warehouse with ETLBox: A .NET Developer's Guide
— From Angular to Blazor: Unleashing the C# Magic!
— C# - Caching Data with MemoryCache
— Using the PVS-Studio extension for VS Code to effectively handle errors in C# code
— Async/Await: Para que serve o CancellationToken?
— C# - Asynchronous Initialization of Singleton Pattern
Посмотреть:
🌐 Using P/Invoke in C#: Windows API Integration Made Easy! (⏱ 15:45)
🌐 Mastering Code with Rubber Duck Debugging 🦆 Unlock Your Programming Potential! (⏱ 01:00)
🌐 "Your Code Has a SQL Injection!" | Code Cop #007 (⏱ 12:11)
🌐 The Missing Piece of Your .NET Logs (⏱ 08:13)
🌐 Every New Feature Added in C# 12 (⏱ 14:19)
🌐 The Coolest Way To Await Multiple Tasks in .NET (⏱ 09:24)
Хорошего дня!
@csharp_ci
Почитать:
— Книга «Blazor в действии» в правильном переводе команды DotNetRu
— Гуманитарий с 0 знаний в программировании. 3 часть. Первые шаги в C# (и слегка Unity)
— Использование расширения VS Code «PVS-Studio» для эффективной борьбы с ошибками в C# коде
— Оплата в Telegram | API Yoomoney С#
— EF Core. Как 1 строчка может добавить x4 к быстродействию запросов к БД?
— Дизайним абилки как в X-COM
— .NET 7 против российской криптографии. Часть 2. Штампы времени
— Как я писала программу на C#, которая шифрует текст по принципу «Квадрат Полибия»
— Как провести курс для разработчиков (за 1.5 млн) в маленькой компании и не сойти с ума
— Microsoft PowerToys: Король GitHub среди C# проектов с C++ ошибками
— From MS-Access to EF Core (C#)
— Explorando el Mundo de los Archivos de Recurso en C# con Visual Studio
— C# - Reducing Lock Contention with ReaderWriterLockSlim
— Game Dev Digest — Issue #212 - Parody, Performance, Modeling and more
— Building a Data Warehouse with ETLBox: A .NET Developer's Guide
— From Angular to Blazor: Unleashing the C# Magic!
— C# - Caching Data with MemoryCache
— Using the PVS-Studio extension for VS Code to effectively handle errors in C# code
— Async/Await: Para que serve o CancellationToken?
— C# - Asynchronous Initialization of Singleton Pattern
Посмотреть:
🌐 Using P/Invoke in C#: Windows API Integration Made Easy! (⏱ 15:45)
🌐 Mastering Code with Rubber Duck Debugging 🦆 Unlock Your Programming Potential! (⏱ 01:00)
🌐 "Your Code Has a SQL Injection!" | Code Cop #007 (⏱ 12:11)
🌐 The Missing Piece of Your .NET Logs (⏱ 08:13)
🌐 Every New Feature Added in C# 12 (⏱ 14:19)
🌐 The Coolest Way To Await Multiple Tasks in .NET (⏱ 09:24)
Хорошего дня!
@csharp_ci
Узнайте о чистоте функций.
▪️ Всегда возвращают один и тот же результат для одних и тех же входных аргументов
▪️ Не имеют побочных эффектов
Чистые функции лежат в основе функционального программирования.
Вот как начать работу с ними в C#:
📌 Статья
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀.NET Aspire - это новый стек, который должен помочь нам создавать облачные нативные решения.
Microsoft представила выпуск открытой платформы .NET 8, созданной благодаря унификации продуктов
.NET Framework, .NET Core и Mono.
На основе
.NET 8
можно создавать многоплатформенные приложения для браузера, облачных систем, рабочего стола, IoT-устройств и мобильных платформ, используя единые библиотеки и общий процесс сборки, не зависящий от типа приложения. Сборки .NET SDK 8, .NET Runtime 8 и ASP.NET Core Runtime 8 сформированы для Linux, macOS и Windows. .NET Desktop Runtime 8 поставляется только для Windows. Ветка .NET 8 отнесена к категории LTS и будет сопровождаться в течение трёх лет до ноября 2026 года. Все связанные с проектом наработки распространяются под лицензией MIT.
В состав .NET 8 входит Runtime с JIT-компилятором RyuJIT, спецификации API, библиотеки WPF, Windows Forms, WinUI, Entity Framework, интерфейс командной строки dotnet, а также инструменты для разработки микросервисов, библиотек, серверных, графических и консольных приложений. Отдельно опубликованы стек для разработки web-приложений ASP.NET Core 8.0, ORM-прослойка Entity Framework Core 8.0 (драйверы имеются, в том числе, для SQLite и PostgreSQL), библиотека WPF 8 (Windows Presentation Foundation), фреймворк Windows Forms 8 для разработки GUI, платформа Aspire 8 для создания приложений Cloud Native, фреймворк MAUI 8 для разработки многоплатформенных интерфейсов пользователя, а также выпуски языков C# 12 и F# 8.
Поддержка .NET 8.0 и C# 12 включена в свободный редактор кода Visual Studio Code.
Подробнее:
https://devblogs.microsoft.com/dotnet/introducing-dotnet-aspire-simplifying-cloud-native-development-with-dotnet-8/
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Если вы сомневаетесь, стоит ли переходить на последнюю версию #dotnet, то одно только повышение производительности должно вас убедить.
📌 Что нового в .NET 8?
@csharp_ci
📌 Что нового в .NET 8?
@csharp_ci
Что выведет на экран этот код?
Anonymous Quiz
59%
Exception on Task 1
22%
A task was canceled
18%
Task 3
🔥 Дайджест полезных материалов из мира C# за неделю
Почитать:
— «Внешние» сортировки: что это, зачем это и как это реализовать?
— Лучшие ресурсы чтобы выучить Git и Github
— C#: [required] keyword, что это?
— Что нового в .NET 8?
— В каких аспектах улучшилась производительность в ASP NET Core 8
— Async/Await: O que tem de novo no .NET 8?
— C# - Default Interface Methods
— Game Dev Digest — Issue #213 - Say Hello To Unity 6
— 🚀 Default Lambda Expression Parameters in C# 12
— What's new in .NET 8?
— C# - Use Record Types for Immutable Data Structures
— What are the Basics of Comments in C# 💭
— Trabalhando com Queues (Filas) no RabbitMQ utilizando C#/.NET
— Alias any Type with C# 12
— Using Primary Constructors in C# 12
Посмотреть:
🌐 "Always Use Any over Count in LINQ" | Code Cop #008 (⏱ 09:56)
🌐 Should You Use The Async Suffix in C#? (⏱ 08:03)
Хорошего дня!
#csharp #dotnet #digest
@csharp_ci
Почитать:
— «Внешние» сортировки: что это, зачем это и как это реализовать?
— Лучшие ресурсы чтобы выучить Git и Github
— C#: [required] keyword, что это?
— Что нового в .NET 8?
— В каких аспектах улучшилась производительность в ASP NET Core 8
— Async/Await: O que tem de novo no .NET 8?
— C# - Default Interface Methods
— Game Dev Digest — Issue #213 - Say Hello To Unity 6
— 🚀 Default Lambda Expression Parameters in C# 12
— What's new in .NET 8?
— C# - Use Record Types for Immutable Data Structures
— What are the Basics of Comments in C# 💭
— Trabalhando com Queues (Filas) no RabbitMQ utilizando C#/.NET
— Alias any Type with C# 12
— Using Primary Constructors in C# 12
Посмотреть:
🌐 "Always Use Any over Count in LINQ" | Code Cop #008 (⏱ 09:56)
🌐 Should You Use The Async Suffix in C#? (⏱ 08:03)
Хорошего дня!
#csharp #dotnet #digest
@csharp_ci
В этом курсе Гэвин обучает вас некоторым более продвинутым концепциям C#.
Вы узнаете о делегатах, событиях, дженериках, асинхронном программировании, атрибутах и многом другом.
▪Видео
▪Код
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
𝗔𝗣𝗜 𝗦𝗲𝗰𝘂𝗿𝗶𝘁𝘆 𝗖𝗵𝗲𝗰𝗸𝗹𝗶𝘀𝘁
Контрольный список наиболее важных мер по обеспечению безопасности при разработке, тестировании и выпуске API.
🐱 Github
@csharp_ci
Контрольный список наиболее важных мер по обеспечению безопасности при разработке, тестировании и выпуске API.
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Потокобезопасность - это правильный подход к реализации одноэлементного шаблона.
Но знаете ли вы, что "блокировка" - очень дорогостоящая операция?
Как это оптимизировать?
Используйте механизм блокировки двойной проверки.
Блокировка двойной проверки используется для гарантии того, что экземпляр Singleton создается только один раз, даже при доступе из нескольких потоков.
Двойная проверка блокировки - это метод, при котором вы сначала проверяете условие блокировки (известное как "подсказка о блокировке"), фактически ничего не блокируя.
Этот метод используется для пропуска ненужных шагов блокировки. Вы приступаете к блокировке только в том случае, если первая проверка показывает, что это необходимо.
@csharp_ci
Но знаете ли вы, что "блокировка" - очень дорогостоящая операция?
Как это оптимизировать?
Используйте механизм блокировки двойной проверки.
Блокировка двойной проверки используется для гарантии того, что экземпляр Singleton создается только один раз, даже при доступе из нескольких потоков.
Двойная проверка блокировки - это метод, при котором вы сначала проверяете условие блокировки (известное как "подсказка о блокировке"), фактически ничего не блокируя.
Этот метод используется для пропуска ненужных шагов блокировки. Вы приступаете к блокировке только в том случае, если первая проверка показывает, что это необходимо.
@csharp_ci
❓Инъекция зависимостей в .NET ?❓
.NET поддерживает проектирование программного обеспечения с возможностью внедрения зависимостей. При таком подходе достигается инверсия управления между классами и их зависимостями.
Внедрение зависимостей в .NET — это встроенная часть платформы, а также конфигурация, ведение журнала и шаблон параметров.
Зависимость — это любой объект, от которого зависит другой объект. Рассмотрим следующий класс MessageWriter с методом Write, от которого зависят другие классы:
Внедрение зависимостей в .NET - это подход, который позволяет классам получать свои зависимости из внешнего источника, вместо того чтобы создавать их самостоятельно. Внедрение зависимостей позволяет отделить процесс создания объектов от кода, который их использует, что приводит к более модульной и гибкой системе.
Почему это нужно:
Классы отделяются друг от друга, поэтому изменения, внесенные в одно место, отражаются во всех остальных местах.
Три способа внедрения зависимостей:
▪️Scoped: Создается экземпляр на каждую область видимости.
▪️Transient: Создается новый экземпляр каждый раз при его внедрении.
▪️Singleton: Создается один объект для всех запросов, поступающих на сервер от любого пользователя.
📌 Читать подробнее
@csharp_ci
.NET поддерживает проектирование программного обеспечения с возможностью внедрения зависимостей. При таком подходе достигается инверсия управления между классами и их зависимостями.
Внедрение зависимостей в .NET — это встроенная часть платформы, а также конфигурация, ведение журнала и шаблон параметров.
Зависимость — это любой объект, от которого зависит другой объект. Рассмотрим следующий класс MessageWriter с методом Write, от которого зависят другие классы:
public class MessageWriter
{
public void Write(string message)
{
Console.WriteLine($"MessageWriter.Write(message: \"{message}\")");
}
}
Внедрение зависимостей в .NET - это подход, который позволяет классам получать свои зависимости из внешнего источника, вместо того чтобы создавать их самостоятельно. Внедрение зависимостей позволяет отделить процесс создания объектов от кода, который их использует, что приводит к более модульной и гибкой системе.
Почему это нужно:
Классы отделяются друг от друга, поэтому изменения, внесенные в одно место, отражаются во всех остальных местах.
Три способа внедрения зависимостей:
▪️Scoped: Создается экземпляр на каждую область видимости.
▪️Transient: Создается новый экземпляр каждый раз при его внедрении.
▪️Singleton: Создается один объект для всех запросов, поступающих на сервер от любого пользователя.
📌 Читать подробнее
@csharp_ci
Что произойдет если попытаться выполнить этот код?
Anonymous Quiz
23%
Возникнет ошибка компиляции - ValueType не могут быть Disposable
23%
Возникнет ошибка времени выполнения – в строке 7 происходит обращение к уничтоженному объекту
28%
На экран выведется «False, False»
26%
На экран выведется «False, True»
🔥 Дайджест полезных материалов из мира C# за неделю
Почитать:
— Возвращаемся на Гроув-Стрит. Анализ движка Grand Theft Auto: San Andreas на Unity
— Как базы данных выполняют SQL-запросы?
— Как устроены DDoS-атаки (и как их предотвратить) Часть 1 .
— Rebuild All currently doesn't work properly
— .NET 8, JIT e AOT
— The NuGet Publishing Puzzle
— Enhancing Explore.CLI
— Understanding the Heap and the Stack in Computer Systems
— Return to Grove Street. Checking the Grand Theft Auto: San Andreas engine in Unity
— Introduction to analyzing text with Azure AI Language Service and C#
— How to Use While Loop in C# for Beginners
— Tests Everywhere - .NET C#
— How Coding to an Interface Can Increase Your Code’s Flexibility
Посмотреть:
🌐 Banishing Magic Strings - A Developer's Guide to Constants and DRY Coding (⏱ 00:57)
🌐 Unleashing Meta's DIY On-Premise AI Magic with Llama!🚀 (⏱ 00:54)
🌐 What Is .NET Aspire? The Insane Future of .NET! (⏱ 18:35)
🌐 How to Deploy .NET 8's New .NET Aspire Stack (⏱ 10:42)
🌐 The New Best Way To Search for Values in .NET 8 (⏱ 11:05)
🌐 The C# 12 Feature You Shouldn’t Use, Yet (⏱ 10:07)
Хорошего дня!
@csharp_ci
Почитать:
— Возвращаемся на Гроув-Стрит. Анализ движка Grand Theft Auto: San Andreas на Unity
— Как базы данных выполняют SQL-запросы?
— Как устроены DDoS-атаки (и как их предотвратить) Часть 1 .
— Rebuild All currently doesn't work properly
— .NET 8, JIT e AOT
— The NuGet Publishing Puzzle
— Enhancing Explore.CLI
— Understanding the Heap and the Stack in Computer Systems
— Return to Grove Street. Checking the Grand Theft Auto: San Andreas engine in Unity
— Introduction to analyzing text with Azure AI Language Service and C#
— How to Use While Loop in C# for Beginners
— Tests Everywhere - .NET C#
— How Coding to an Interface Can Increase Your Code’s Flexibility
Посмотреть:
🌐 Banishing Magic Strings - A Developer's Guide to Constants and DRY Coding (⏱ 00:57)
🌐 Unleashing Meta's DIY On-Premise AI Magic with Llama!🚀 (⏱ 00:54)
🌐 What Is .NET Aspire? The Insane Future of .NET! (⏱ 18:35)
🌐 How to Deploy .NET 8's New .NET Aspire Stack (⏱ 10:42)
🌐 The New Best Way To Search for Values in .NET 8 (⏱ 11:05)
🌐 The C# 12 Feature You Shouldn’t Use, Yet (⏱ 10:07)
Хорошего дня!
@csharp_ci
❓Как перестать тратить ресурсы сервера?❓
✅Можно использовать CancellationToken. ✅
▪️CancellationToken можно использовать для обеспечения оперативной и эффективной отмены операций с базой данных.
Длительные запросы или операции с базой данных могут повлиять на производительность и отзывчивость вашего API. Использование маркеров отмены позволяет клиентам отменять эти операции, если они занимают больше времени, чем ожидалось, или больше не нужны.
Допустим, вы тестируете конечную точку API с длительным периодом выполнения через Postman.
Если вызов слишком длинный, можно нажать на кнопку "Отмена", чтобы остановить вызов.
Если в вашем коде есть поддержка CancellationToken, то операция будет отменена и ресурсы будут освобождены.
@csharp_ci
✅Можно использовать CancellationToken. ✅
▪️CancellationToken можно использовать для обеспечения оперативной и эффективной отмены операций с базой данных.
Длительные запросы или операции с базой данных могут повлиять на производительность и отзывчивость вашего API. Использование маркеров отмены позволяет клиентам отменять эти операции, если они занимают больше времени, чем ожидалось, или больше не нужны.
Допустим, вы тестируете конечную точку API с длительным периодом выполнения через Postman.
Если вызов слишком длинный, можно нажать на кнопку "Отмена", чтобы остановить вызов.
Если в вашем коде есть поддержка CancellationToken, то операция будет отменена и ресурсы будут освобождены.
@csharp_ci
ℹ️Получение случайных элементов из коллекцииℹ️
Получение случайных элементов из коллекции возможно всего одной строкой. 💡
.NET 8 приносит нам много нового во всех областях его деятельности. Одной из наиболее интересных новинок является случайный выбор определенного количества элементов в коллекции - с помощью встроенной функции.
Метод называется GetItems<T>().
Вы можете передать коллекцию и желаемое количество элементов.
Метод доступен в пространствах под названием System.Random.
В данном примере мы используем метод GetItems<T>() для случайной выборки 3 животных из массива.
@csharp_ci
Получение случайных элементов из коллекции возможно всего одной строкой. 💡
.NET 8 приносит нам много нового во всех областях его деятельности. Одной из наиболее интересных новинок является случайный выбор определенного количества элементов в коллекции - с помощью встроенной функции.
Метод называется GetItems<T>().
Вы можете передать коллекцию и желаемое количество элементов.
Метод доступен в пространствах под названием System.Random.
В данном примере мы используем метод GetItems<T>() для случайной выборки 3 животных из массива.
@csharp_ci
💡Не путайте IEnumerable и List в .NET💡
IEnumerable - это базовый интерфейс для всех коллекций в .NET, а List - конкретный класс.
IEnumerable:
1️⃣Только для чтения.
2️⃣Это интерфейс
3️⃣Он не может быть инициализирован с помощью
4️⃣Определяет единственный метод GetEnumerator.
5️⃣Если вам не нужно выполнять добавление/удаление, то лучше всего.
6️⃣IEnumerable реализована во многих коллекциях, таких как Array, List и Dictionary
List:
1️⃣Не только для чтения.
2️⃣Это конкретный класс.
3️⃣Лучше всего подходит для выполнения операций добавления/удаления.
4️⃣Он реализует IList, а IList реализует IEnumerable, поэтому список обладает всеми возможностями IEnumerable
@csharp_ci
IEnumerable - это базовый интерфейс для всех коллекций в .NET, а List - конкретный класс.
IEnumerable:
1️⃣Только для чтения.
2️⃣Это интерфейс
3️⃣Он не может быть инициализирован с помощью
new()
4️⃣Определяет единственный метод GetEnumerator.
5️⃣Если вам не нужно выполнять добавление/удаление, то лучше всего.
6️⃣IEnumerable реализована во многих коллекциях, таких как Array, List и Dictionary
List:
1️⃣Не только для чтения.
2️⃣Это конкретный класс.
3️⃣Лучше всего подходит для выполнения операций добавления/удаления.
4️⃣Он реализует IList, а IList реализует IEnumerable, поэтому список обладает всеми возможностями IEnumerable
@csharp_ci