Библиотека шарписта | C#, F#, .NET, ASP.NET
22.9K subscribers
2.26K photos
36 videos
85 files
4.43K links
Все самое полезное для C#-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
Ковариантность предполагает возможность возвращать из метода объект, тип которого является производным от типа, возвращаемого делегатом, а контрвариантность предполагает возможность передавать в метод объект, тип которого является более универсальным по отношению к типу параметра делегата.

Делегат, указанный в задании, являвется ковариантным.
Gui.cs — простой набор инструментов для разработки кросплатформенных консольных графических приложений для .NET, .NET Core и Mono.

https://github.com/migueldeicaza/gui.cs
​​Что бы там ни говорили, а данные – это не только аналитика. Кто-то должен эти данные найти, сохранить и подготовить для анализа. Теперь всему можно научиться на факультете Data Engineering онлайн-университета GeekBrains:

🛠 Автоматизировать сбор данных
🚠 Создать конвейер обработки информации
🏗 Разработать архитектуру хранения и мониторинга
👓 Подготовить результаты для аналитиков

При успешном прохождении курсов компания гарантирует не только диплом, но и трудоустройство. Список осваиваемых инструментов и отзывы учеников здесь: https://proglib.io/w/5508d80c
Konrad_Kokosa_Pro_NET_Memory_Management_For_Better_Code,_Performance.pdf
24.2 MB
Pro .NET Memory Management: For Better Code, Performance, and Scalability (2018)

Автор(ы): Konrad Kokosa

Книга научит понимать внутреннюю работу, подводные камни и методы управления памятью .NET, чтобы эффективно избегать проблемы производительности и масштабируемости вашего программного обеспечения.

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

В ходе чтения книги вы научитесь понимать теоретические основы автоматического управления памятью, использовать инструменты, связанные с управлением памятью .NET, для диагностики различных проблем; окунитесь в каждый аспект управления памятью .NET, включая подробное описание реализации сборки мусора (GC); получите практические советы о том, как эти знания могут быть применены в реальной разработке программного обеспечения.
​​#вопросы_для_самопроверки

Является ли нижеуказанный метод асинхронным? Если да, то почему? Если нет, то почему?

Какими признаками должен обладать асинхронный метод?
Указанный выше метод не является асинхронным, так как он не использует выражение await.

Признаки, которыми должен обладать асинхронный метод?
– в определении асинхронного метода используется модификатор async;
– асинхронный метод содержит одно или несколько выражений await;
– возвращаемыми типами асинхронного метода могут быть void, Task, Task<T> или ValueTask<T>.
#вопросы_для_самопроверки

Что такое приватные и совместные сборки, а также манифест сборки (assembly manifest)?
Сборки в .Net бывают приватными (локальными), которые использует только само приложение, и совместными, использующиеся набором приложений.

Приватные сборки видны только самому приложению и никому более, т. е. приложение изолируется от внешнего воздействия, как других программ, так и самой операционной системы. Соответственно, они лишены многих проблем, связанных с совместными сборками. К примеру, такой, как уникальность имен: так как сборка локальная, нет необходимости заботиться об уникальности имен во всем глобальном пространстве имен. CLR при запуске приложения прочитает его манифест и определит, какие сборки необходимы. Затем будет произведен процесс зондирования (probing) рабочего каталога приложения на предмет нужной сборки. Необходимая сборка определяется по имени файла, определенного в манифесте.

Совместные сборки могут быть использованы сразу несколькими приложениями. К таким сборкам предъявляются более строгие правила, чем к приватным сборкам, например: необходима уникальность имен сборки, т. е. имена внутри сборки не должны конфликтовать с уже существующими в глобальном пространстве имен, предоставляемом средой исполнения по умолчанию. Действия системы управления версиями при поиске необходимых сборок могут быть изменены при помощи политики версий, которую сможет изменять администратор или автор приложения. Данная политика позволит принудительно изменить версию сборки, запрашиваемой приложением, а также поведение среды исполнения при поиске и загрузке сборок. Таким образом, имеется возможность «заставить» приложение использовать сборку другой версии, даже если оно на это не рассчитано. Данная политика настраивается при помощи файла конфигурации, который помещается в каталог приложения и имеет то же имя, что и у приложения, только с расширением .config. Совместные сборки хранятся в глобальном кэше сборок.

Манифест сборки — это внутренняя часть сборки, которая позволяет ей быть самоописанной. Он позволяет идентифицировать сборку, указывает файлы, которые включаются в реализацию сборки, описывает типы и ресурсы, используемые в сборке, указывает зависимости от других сборок, а также набор прав доступа, которые необходимы сборке для корректной работы. Эта информация используется во время выполнения для разрешения ссылок, проверки корректности версий и целостности загруженных сборок.
Увлекаешься компьютерными играми? Научись не только в них играть, но и создавать свои собственные! 9–11 июля пройдёт бесплатный интенсив по Unity, на котором ты сможешь попробовать себя в роли гейм-разработчика!

Нужна только регистрация: 🔜 https://clc.to/aIiSjQ.

💫 За 3 вечера ты создашь полноценную космическую игру.
💫 Получишь неограниченный доступ к материалам занятий.
💫 Задашь любые вопросы опытному разработчику.
💫 Подготовишь достойный проект для портфолио.


🎉 Авторам трёх лучших работ подарят сертификаты на 30 000 рублей для обучения в Skillbox!
​​🕵 Где программисту искать удаленную работу?

Рассмотрели 12 международных и российских площадок для поиска удалённой работы: ссылки, различия в механике поиска, плюсы и минусы.

https://proglib.io/sh/30rRSxjemG
#вопросы_для_самопроверки

Как обеспечить использование именованных параметров в конструкторе атрибута?
Конструкторы атрибутов могут принимать именованные параметры — поля и свойства атрибутов. При задании именованного параметра в конструктор атрибута передается имя свойства или поля, которое должно быть открытым и должно принять этот параметр. Если именованные параметры передаются, то они обязательно должны идти следом за позиционными параметрами, которые явно указаны в конструкторе атрибута.

Указание именованных параметров не является обязательным, поэтому при проектировании атрибутов необходимо помнить о том, что некоторые его поля или свойства могут быть не проинициализированы. Пример использования именованных параметров в конструкторе атрибута: [DllImport("Kernel32", CharSet=CharSet.Auto, SetLastError=true)]

В примере передается 1 позиционный параметр — строка "Kernel32" и 2 именованных параметра, которые устанавливают открытые поля CharSet и SetLastError в значения CharSet.Auto и true соответственно.