Обновить
88.77

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Делаем джойстик из Windows Phone

Время на прочтение5 мин
Охват и читатели13K

Небольшая предыстория.


imageОднажды вечером подошел ко мне сын и сказал, что хочет поиграть в Марио. Летом у бабушки на даче он любил «зарубиться» в дождливую погоду. А за окном как раз дождь. Не долго думая я скачал ему первый попавшийся эмулятор 8-ми битной приставки и игру. Однако, оказалось, что удовольствие от игры на клавиатуре совсем не то. Идти покупать джойстик было уже поздно. И тогда я подумал, что можно обойтись и без него. Под рукой у нас была старенькая Nokia Lumia, ее размеры и форма примерно совпадали с нашими нуждами. Было решено написать джойстик. Сын отправился рисовать дизайн на листе бумаги в клеточку, а папа пошел варить кофе и думать, как бы осуществить эту идею с наименьшими временными затратами.

Я решил пойти по пути наименьшего (с моей точки зрения) сопротивления. Эмулятору приставки в настройках надо указывать нажатые кнопки, значит наше приложение должно нажимать кнопки. Нажатие кнопок можно эмулировать при помощи старого доброго WINAPI.

Конечной идеей стало клиент-серверное приложение. Клиент (телефон) при нажатии на кнопку посылает запрос на сервер, который, в свою очередь, в зависимости от того что пришло эмулирует нажатие или отпускание кнопки клавиатуры. Связь же осуществляется через сокеты. Вроде все просто. Начинаем делать.
Читать дальше →

Новогодняя проверка .NET Core Libraries (CoreFX)

Время на прочтение7 мин
Охват и читатели12K
Около года назад Microsoft выложила в открытый доступ исходный код таких проектов, как CoreCLR и CoreFX. Последний проект до недавнего времени не был нам интересен, потому что написан на языке C#, а не C++. Но с выходом новой версии PVS-Studio 6.00, поддерживающей проекты и на языке программирования C#, я решил вернуться к CoreFX и написать статью.

Введение


.NET Core это модульная реализация библиотек и среды выполнения, которая включает подмножество .NET Framework. .NET Core состоит из набора библиотек, называемых «CoreFX» и небольшой оптимизированной рабочей среды «CoreCLR».

.NET Core распространяется с открытым исходным кодом, который доступен на GitHub:
Это крупные продукты от Microsoft, содержащие качественный исходный код, но подозрительные участки кода всё равно можно найти.

О проверке CoreCLR можно прочитать в статье "PVS-Studio: 25 подозрительных фрагментов кода из CoreCLR".

Проект CoreFX, о котором подойдёт речь в статье, проверялся с помощью статического анализатора PVS-Studio 6.00, который теперь поддерживает и C#!
Читать дальше →

ASP.NET 5. Аутентификация по токену

Время на прочтение5 мин
Охват и читатели25K
Понадобилось мне написать некое ASP.NET WebApi приложение, и клиентское приложение на Javascript с использованием этого API. Решено было писать на ASP.NET 5, заодно и изучить новый релиз.

Если бы это было обычное MVC приложение, я бы использовал cookie-based аутентификацию, но кросс-доменные запросы не позволяют передавать куки. Следовательно, необходимо использовать token-based аутентификацию.

Microsoft предлагает свою реализацию — JwtBearerAuthentication. Но охота же самому во всем разобраться. Поэтому я решил написать свою реализацию — BearerAuthentication.
Читать дальше →

«Roslyn — еще очень сырая технология» — интервью с Сергеем Шкредовым, руководителем .NET-направления в JetBrains

Время на прочтение24 мин
Охват и читатели31K
Привет, это снова Без слайдов. Я Алексей Федоров, и на этот раз в гостях у меня побывал Сергей Шкредов, руководитель всего .NET-направления в компании JetBrains.



С Сергеем мы говорили:
  • о последних релизах ReSharer;
  • о новой схеме подписок и лицензий;
  • про непростые отношения с Microsoft;
  • о рантайме и развитии языка;
  • о том, как поменял ситуацию выход Roslyn;
  • о работе с фидбеком пользователей для улучшения продукта;
  • о планах развития других продуктов .NET стека;
  • о важности внутриотраслевого общения и обмена опытом;
  • про разработку продуктов для С++;
  • немного о ReSharper C++, на который должны подсесть даже разработчики Microsoft;
  • О том, как пользователи почувствуют изменения;
  • Как ReSharper будет развиваться дальше.


Вот видео



Под катом — текстовый вариант интервью.

Читать интервью...

DotNext 2015 в Москве: раздвигая границы

Время на прочтение7 мин
Охват и читатели4.9K
Конференция DotNext дошла до уровня, когда среди российских .NET-программистов она уже не нуждается в представлении: появившись в Петербурге почти два года назад, она взялась покорять столицу и собрала множество участников. Но теперь, когда о прошедшей недавно в Москве DotNext 2015 Moscow не требуется объяснять «что это такое», возникает новый вопрос: чем она отличалась от прошлогодней?

Ответ на этот вопрос — в подробном рассказе о прошедшей конференции под катом.



Читать дальше →

Распарсить HTML в .NET и выжить: анализ и сравнение библиотек

Время на прочтение8 мин
Охват и читатели133K

В ходе работы над одним домашним проектом, столкнулся с необходимостью парсинга HTML. Поиск по гуглу выдал комментарий Athari и его микро-обзор актуальных парсеров HTML в .NET за что ему огромное спасибо.

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

Сегодня я протестирую популярные, на данный момент, библиотеки для работы с HTML, а именно: AngleSharp, CsQuery, Fizzler, HtmlAgilityPack и, конечно же, Regex-way. Сравню их по скорости работы и удобству использования.


TL;DR: Код всех бенчмарков можно найти на github. Там же лежат результаты тестирования. Самым актуальным парсером на данный момент является AngleSharp — удобный, быстрый, молодежный парсер с удобным API.

Тем, кому интересен подробный обзор — добро пожаловать под кат.
Читать дальше →

Новогодний релиз PVS-Studio 6.00: проверяем Roslyn

Время на прочтение16 мин
Охват и читатели11K
PVS-Studio 6.00, C,C++,C#
Настало долгожданное событие. Мы выпустили релизную версию статического анализатора кода PVS-Studio 6.00, поддерживающего проверку C#-проектов. Теперь осуществляется проверка кода, написанного на следующих языках: C, C++, C++/CLI, C++/CX, C#. К выпуску шестой версии анализатора мы приурочили проверку открытого проекта Roslyn. Именно благодаря Roslyn в анализаторе PVS-Studio появилась поддержка C#, и мы очень благодарны компании Microsoft за реализацию и развитие этого проекта.
Читать дальше →

Погружение в ASP.NET 5 Runtime

Время на прочтение16 мин
Охват и читатели28K

Вступление от переводчика


Данная статья является переводом ASP.NET 5 — A Deep Dive into the ASP.NET 5 Runtime — введения в архитектуру DNX и построенного на нем ASP.NET 5. Так как оригинальная статья была написана в марте 2015 года, во время, когда ASP.NET 5 был еще в стадии активной разработки (примерно beta 3), многое в ней устарело. Поэтому при переводе вся информация была актуализирована до текущей версии ASP.NET 5 (RC1), также были добавлены ссылки на связанные ресурсы (в основном на docs.asp.net) и исходный код на GitHub (смотрите только в случаях, если вам интересна реализация). Приятного погружения!

.NET Runtime Environment (DNX)


ASP.NET 5 базируется на гибком, кроссплатформенном runtime, который может работать с разными .NET CLR (.NET Core CLR, Mono CLR, .NET Framework CLR). Вы можете запустить ASP.NET 5 используя полный .NET Framework или можете запустить используя новый .NET Core docs, который позволяет вам просто копировать все необходимые библиотеки вместе с приложением в существующее окружение, без изменения чего-либо еще на вашей машине. Используя .NET Core вы также можете запустить ASP.NET 5 кроссплатформенно на Linux docs и Mac OS docs.

Инфраструктура позволяющая запускать и исполнять приложения ASP.NET 5 называется .NET Runtime Environment docs или кратко DNX. DNX предоставляет все что необходимо для работы .NET приложений: host process, CLR hosting логику, обнаружение управляемой Entry Point и т.д.

Логически архитектура DNX имеет пять слоев. Я опишу каждый из этих слоев вместе с их обязанностями.
Изображение взято из статьи DNX-structure wiki
Архитектура ASP.NET 5 и DNX

Читать дальше →

NW+Edge.js+Fiddler или сказ о стыкуемости нестыкуемого

Время на прочтение4 мин
Охват и читатели4.9K
Привет всем.
Не так давно прочел статью Что нам стоит сайт распарсить. Основы webdriver API и вспомнил, что давно собирался довести хотя бы до относительно рабочего состояния одну забавную задумку. Руки все-таки дошли, а значит пора поведать, что же получилось.
Есть такая замечательная программа — Fiddler, позволяющая перехватывать и модифицировать http/https запросы. Есть замечательная штука под названием NW.js, она же node-webkit, позволяющая тыр… парсить разнообразные сайты в том числе. Вы красивы, я прекрасен — почему бы нам не подружиться?
Собственно, затея вот в чем: можно было бы, конечно, отдельно поднять Fiddler, написать в нем логику и гонять через него трафик с node-webkit-но это не так интересно. А значит, будем совмещать все под одной крышей, благо у Fiddler есть библиотека на C# — FiddlerCore.
Под ноду есть отличный модуль — Edge.js. Это такая хитрая штука, которая позволяет исполнять код C# (и не только). Есть под ноду? Замечательно, можно завести и под nw.js, благо даже мануал есть — да вот же он!

Читать дальше →

Интерактивный C#

Время на прочтение3 мин
Охват и читатели39K


Обновление с номером 1 принесло в Visual Studio не только немного измененный значок, но и еще разные приятные нововведения. Кстати, вот так выглядит новый значок:



Одним из дополнений является «Интерактивный C#». Фактически это окошко REPL.
Подробнее о REPL и Интерактивном C#

Проверяем Microsoft Code Contracts

Время на прочтение11 мин
Охват и читатели10K


Мы успешно создали и продолжаем развивать анализатор PVS-Studio для языка C/C++. Со временем стало понятно, что многие из реализованных диагностик никак не связаны с конкретным языком программирования, и тогда мы решили попробовать применить свой опыт к другому языку программирования, к C#. В данной статье будет рассказано о проверке проекта Code Contracts от Microsoft с помощью нового C# анализатора.

О проекте MS Code Contracts


Code Contracts предоставляют метод, с помощью которого выражаются предположения о коде программы в .NET приложениях. Контракты принимают форму предусловий, постусловий и инвариантов объекта, и выступают в роли проверенной документации ваших внешних и внутренних API. Контракты используются для того, чтобы улучшить процесс тестирования с помощью проверки во время выполнения программы, позволяя проводить статическую верификацию контрактов и генерацию документации.
Читать дальше →

Disposable без границ

Время на прочтение3 мин
Охват и читатели14K

В своей предыдущей статье я рассказал, как объект может просто и надежно нести ответственность за свои ресурсы.

Но есть множество вариантов владения, которые не являются персональной ответственностью объекта:
  • Ресурсы, которыми владеют зависимости. При использовании Dependency Injection объект класса не только не должен отвечать за жизненный цикл своих зависимостей, он просто физически не может это делать: зависимость может разделяться между несколькими клиентами, зависимость может реализовать IDisposable, а может не реализовать, но при этом у нее могут быть свои зависимости и так далее. Кстати, этот довод сразу ставит крест на любых бизнес-интерфейсах, расширяющих IDisposable: такой интерфейс требует от своих реализаций невозможного — отвечать за себя и за того парня (зависимости)
  • Ресурсы, которые при некоторых условиях не надо очищать. Это, к примеру, дурная привычка StreamReader закрывать нижележащий Stream при вызове Dispose
  • Ресурсы, которые являются внешними по отношению к зависимости, но требуются клиенту в процессе ее использования. Самый простой пример — подписка на события объекта при присвоении его свойству.

Что же может здесь помочь?

Нестандартный подход к стандартной разработке дополнения (Add-In’а) на C#

Время на прочтение15 мин
Охват и читатели8.8K
С помощью Add-In'a можно реализовать дополнительную функциональность, серьезно облегчающую повседневное использование приложения. Типовой подход прост – изучаем API приложения для разработки дополнения и реализуем его в виде отдельной библиотеки. На выбор обычно предлагается несколько языков, С# скорее всего будет в данном списке из-за его распространенности и популярности для разработки приложений под Windows на платформе .Net.

Однако часто бывает необходимо, чтобы дополнение постоянно отображало какую-то визуальную информации, нужную при использовании приложения. При простом решении данной проблемы — создание пользовательского окна и отображении его либо поверх всех окон, либо перемещением его на передний план — мы получаем некоторые неудобства с организацией пользовательского пространства. С ними можно кое-как мириться, но что делать, если таких окон должно быть несколько?

Как правило в самой среде приложения все организовано как надо — нужные действия реализованы в виде дополнительных окон, расположение и размер которых пользователь как хочет, так и настраивает для себя. Можно предположить, что API должен содержать данную функциональность интеграции пользовательских окон в среду, но как ни странно, скорее всего такой функционал будет отсутствовать. Но, если очень нужно, это можно реализовать.
Читать дальше →

Ближайшие события

Вызываем обработчики событий потокобезопасно без лишнего присваивания в C# 6

Время на прочтение8 мин
Охват и читатели12K

От переводчика


Часто начинающие разработчики спрашивают, зачем при вызове обработчика нужно копировать его в локальную переменную, а как показывает код ревью, даже опытные разработчики забывают об этом. В C# 6 разработчики языка добавили много синтаксического сахара, в том числе null-conditional operator (null-условный оператор или Элвис-оператор — ?.), который позволяет нам избавиться от ненужного (на первый взгляд) присваивания. Под катом объяснения от Джона Скита — одного из самых известных дот нет гуру.
Читать дальше →

Третья альфа версия Perspex UI Framework с поддержкой iOS/Android

Время на прочтение3 мин
Охват и читатели7.6K
Мы рады представить третью альфа версию Perspex (см. предыдущий анонс).
Perspex — кроссплатформенный UI-фреймворк для .NET с открытым исходным кодом, сделанный по образу и подобию WPF, с XAML, биндингами, шаблонами контролов, собственной системой отрисовки и прочими плюшками.

В этом релизе добавлена первоначальная поддержка платформ iOS и Android, улучшены дизайнер и XAML, исправлено множество ошибок.



Список изменений под катом.
Читать дальше →

Unity в действии. Мультиплатформенная разработка на C#

Время на прочтение4 мин
Охват и читатели45K
Здравствуйте, уважаемые Хаброжители!

Мы хотим вас порадовать: вышла книга по Unity Unity in Action: Multiplatform Game Development in C#.

И несколько слов о самой книге. Ее можно считать введением в Unity для опытных программистов. Цель книги крайне проста: научить людей, имеющих опыт программирования, но ни разу не сталкивавшихся с Unity, разрабатывать игры с помощью этого инструмента.

Учить разработке лучше всего на примерах проектов, заставляя обучающихся выполнять практические задания, и именно такой подход используется в данном случае. Темы представлены как этапы построения отдельных игр, и я настоятельно рекомендую вам в процессе знакомства с книгой заняться разработкой этих игр при помощи Unity. Мы рассмотрим ряд проектов, каждому из которых посвящено несколько глав. Бывают книги, целиком посвященные одному крупному проекту, но такой подход исключает возможность чтения с середины, если информация в первых главах покажется вам неинтересной.

В этой книге более строго, чем в большинстве других изданий (особенно предназначенных для начинающих), изложен материал, касающийся программирования. Unity зачастую представляют как набор компонентов, не требующих программирования, что в корне неверно, так как не дает людям знаний, без которых невозможно производство коммерчески успешных продуктов. Если вы пока не имеете навыков программирования, советую сначала их приобрести и только после этого приступать к чтению.
Читать дальше →

А вы получили a-Mail?.. Бухгалтерская почта

Время на прочтение8 мин
Охват и читатели6.5K


В соответствии с замыслом, a-Mail (accounting mail, то есть бухгалтерская почта) – ближайший родственник электронной почты e-mail. Отличие в том, что по электронной почте данные передаются в произвольном текстовом виде, а по бухгалтерской почте – в формализованном, предназначенном для автоматического размещения в учетной базе пользователя. Фактически речь идет стандарте обмена данными между бухгалтерскими программами.

Стандарт реализован в ходе проекта «Учетная Логика». Данная история разворачивалась на Хабре в течение трех лет и теперь, похоже, близка к завершению.

Под катом находится краткое описание стандарта a-Mail и сетевых возможностей «Учетной Логики» версии 3.0 (в предыдущих версиях данная функция отсутствовала).
Читать дальше →

Рекомендации по написанию кода на C# от Aviva Solutions

Время на прочтение40 мин
Охват и читатели85K
Представляю вашему вниманию перевод документа "Coding Guidelines for C# 3.0, 4.0 and 5.0".

Целью создания этого списка правил является попытка установить стандарты написания кода на C#, которые были бы удобными и практичными одновременно. Само собой, мы практикуем то, что создали. Эти правила являются одним из тех стандартов, которые лежат в основе нашей ежедневной работы в AvivaSolutions. Не все эти правила имеют четкое обоснование. Некоторые из них просто приняты у нас в качестве стандартов.

Статический анализатор кода VisualStudio (который также известен как FxComp) и StyleCop могут автоматически применять многие из правил кодирования и оформления путем анализа скомпилированных сборок. Вы можете сконфигурировать их таким образом, чтобы анализ производился во время компиляции или был неотъемлемой частью непрерывной или ежедневной сборки. Этот документ просто добавляет дополнительные правила и рекомендации, но его вспомогательный сайт www.csharpcodingguidelines.com предоставляет список правил анализа кода, необходимых в зависимости от того, с какой базой кода вы работаете.
Читать дальше →

Экспериментальная версия PVS-Studio, поддерживающая C#

Время на прочтение11 мин
Охват и читатели14K
PVS-Studio for C/C++/C#
У нас появилась экспериментальная версия анализатора PVS-Studio, который умеет анализировать C#-проекты и который можно показать миру. Это не Release, и даже не Beta. Это просто текущая сборка PVS-Studio. Мы хотим как можно раньше начать получать отзывы от наших пользователей или потенциальных пользователей касательно поддержки C#. Поэтому предлагаем энтузиастам попробовать новую версию PVS-Studio на своих C#-проектах и рассказать нам о результатах, недостатках и высказать свои пожелания. Ах да, и конечно в статье будут описаны результаты проверки очередного проекта — SharpDevelop.
Читать дальше →

Базовая реализация INotifyPropertyChanged

Время на прочтение12 мин
Охват и читатели23K
WPF в чём-то повторил судьбу js — в силу некоторых нерешённых на уровне платформы проблем многие пытаются стать первооткрывателями наравне с Карлом фон Дрезем.

Проблема


В случае с INPC в ViewModel часто существуют свойства, зависящие от других или вычисляемые на их основе. Для .net 4.0 ситуация с реализацией усложняется тем, что CallerMemberNameAttribute не поддерживается в этой версии (на самом деле поддерживается, если вы маг и кудесник).

Решение

Как пользоваться и что внутри

Вклад авторов