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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
​​#вопросы_для_самопроверки

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

Какими признаками должен обладать асинхронный метод?
Указанный выше метод не является асинхронным, так как он не использует выражение 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 соответственно.
#вопросы_для_самопроверки

Объясните предназначение ключевого слова volatile в C#.
Если у вас многопоточное приложение с разделяемыми несколькими потоками данными (например полями класса), то у вас нет гарантии того, что данные в эти разделяемые поля будут записаны одним потоком и прочитаны другим потоком именно в том порядке, в котором вы их написали в своём коде.

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

Ключевое слово volatile может применяться к полям следующих типов:
– Ссылочные типы.
– Типы указателей (в небезопасном контексте). Несмотря на то, что сам указатель может быть изменяемым, объект, на который он указывает, должен быть постоянным. Другими словами, объявить указатель на изменяемый объект невозможно.
– Простые типы, например sbyte, byte, short, ushort, int, uint, char, float и bool.
– Тип enum с одним из следующих базовых типов: byte, sbyte, short, ushort, int или uint.
– IntPtr и UIntPtr.

Ключевое слово volatile можно применять только к полям class или struct. Локальные переменные не могут объявляться как volatile.
Теперь bug hunter'ы могут помочь сервису, которым пользуются они сами, друзья, близкие и мама с бабушкой — Ozon первым среди российских e-commerce компаний запустил собственную bug bounty программу.

За найденные на сайте уязвимости можно получить до 120 000 ₽. Отправлять репорты можно на HackerOne: hackerone.com/ozon. Удачной охоты!
Возможности разработки кроссплатформенных мобильных, настольных и веб-приложений на языке C# расширяются, поэтому особенную пользу приобретают аналитические статьи, в которых проводится сравнение доступных на сегодняшний день инструментов для кроссплатформенной разработки под .NET Core.

Часть 1
Часть 2
C# разработчик
Формат работы: #fulltime #remote
Зарплата: $ 40 000 - 50 000 в год

Мы — платформа 6nomads, и прямо сейчас мы ищем опытного C# разработчика в компанию с экспертизой в игровой индустрии. Новому члену команды предстоит заниматься сложным многокомпонентным windows-приложением, его поддержкой, интеграцией и развитием.

Что важно:
— Опыт разработки на С# от 3 лет;
— Знание принципов ООП, SOLID, KISS, DRY;
— Опыт .NET core;
— Опыт работа с многопоточностью (не только через Tasks, но и через Threads);
— Опыт работы с системами контроля версий (Git);
— Английский достаточный для чтения тех документации.

Будет плюсом:
— Техническое образование, хорошая алгоритмическая подготовка;
— Опыт работы в распределенных командах;
— Опыт мобильной разработки и работы с эмуляторами;
— Опыт работы с неуправляемым кодом.

Что предлагают:
— Сложные задачи, в которых можно сильно прокачать свои навыки;
— Участие в построении архитектуры разрабатываемых продуктов;
— Гибкий график;
— Оплата обучения внутри и вне компании.

Чтобы откликнуться, необходимо пройти короткий отбор по ссылке https://6nomads.com/. После этого мы сможем рекомендовать вас работодателю и свести к минимуму затяжные согласования и лишние собеседования.