Как стать автором
Обновить
30
Карма
0
Рейтинг

Пользователь

  • Подписчики 41
  • Подписки 3

Эстетика XAML: конвертеры значений [WPF]

Программирование *.NET *Промышленное программирование *Xamarin *
Tutorial

В статье представлены обобщённые подходы применения конвертеров значений при написании XAML-кода.

>> Читать на английском

Читать на русском
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 3.2K
Комментарии 0

typeof(T) vs. TypeOf⟨T⟩

Программирование *.NET *Промышленное программирование *
Иногда рефлексивные вызовы дороги в терминах производительности и не могут быть опущены.

В этой статье представлены паттерны, позволяющие существенно повысить производительность множественных рефлексивных вызовов посредством техники виртуализации (кэширования) результатов.

image
Читать дальше →
Всего голосов 17: ↑12 и ↓5 +7
Просмотры 16K
Комментарии 229

Правостороннее присваивание и другие необычные приёмы программирования в C#

Занимательные задачки Программирование *.NET *C# *Промышленное программирование *
В этой статье будут рассмотрены с нового ракурса такие привычные и фундаментальные вещи, как присваивание и передача параметров в методы.

Вероятно, предлагаемые решения поначалу покажутся несколько странными и надуманными, но прелесть их раскроется чуть позже, когда станет видна вся картина целиком.

Будет много нового и интересного, возможно, даже полезного. А после прочтения каждый сам сможет решить, стоит ли ему применять описанные техники в дальнейшей повседневной практике.

За дело!

image
Читать дальше →
Всего голосов 45: ↑39 и ↓6 +33
Просмотры 27K
Комментарии 369

Исправлять ли unexpected behavior в C# 7 или оставить как есть, усложнив синтаксис языка для компенсации?

.NET *C# *
В языке C# с давних времён есть оператор 'is' назначение которого довольно ясное

if (p is Point) Console.WriteLine("p is Point");
else Console.WriteLine("p is not Point or null");

Кроме того его можно использовать для проверок на null

if (p is object) Console.WriteLine("p is not null");
if (p is null) Console.WriteLine("p is null");

В C# 7 анонсирована новая возможность pattern-matching

if (GetPoint() is Point p) Console.WriteLine($"X={p.X} Y={p.Y}");
else Console.WriteLine("It is not Point.");

if (GetPoint() is var p) Console.WriteLine($"X={p.X} Y={p.Y}");
else Console.WriteLine("It is not Point.");

Вопрос, что произойдёт в обоих случаях, если метод вернёт 'null'? Вы уверены?
Читать дальше →
Всего голосов 40: ↑38 и ↓2 +36
Просмотры 11K
Комментарии 291

Фотографируем объекты в C#: хроника и сопоставление снимков, реконструкция состояния по снимку

Программирование *C# *Промышленное программирование *Разработка под Windows *
Tutorial
При разработке приложений часто встречается следующий сценарий: имеется некоторый набор данных доступных для просмотра и редактирования, например, это могут быть бизнес-сущности или настройки приложения. В момент, когда пользователь решает что-либо отредактировать, ему обычно становится доступна специальная форма с нужными полями ввода-вывода и другими элементами управления. Если он вносит какие-либо корректировки в данные, то при обработке формы хорошим тоном является запрос-подтверждение перед окончательным применением внесённых правок. В случае согласия пользователя данные обновляются в источнике и на интерфейсе, а при отмене используются старые значения.

Данная задача включает две подзадачи:

1) когда пользователь уходит с формы редактирования, необходимо понимать, действительно ли он произвёл изменения, чтобы не задавать вопрос на подтверждение впустую и не перезаписывать идентичные данные;

2) если редактированию подвергается непосредственно исходная сущность, а не её копия, то в случае отмены необходимо сохранять возможность отката к исходным значениям.

В статье мы рассмотрим обобщённый и очень лаконичный [размером в несколько строк кода!] подход к решению подобного рода задач, основанный на использовании библиотеки Replication Framework.

image
Читать дальше →
Всего голосов 10: ↑9 и ↓1 +8
Просмотры 5.8K
Комментарии 21

Обобщённое копирование связных графов объектов в C# и нюансы их сериализации

Ненормальное программирование *Программирование *.NET *C# *Промышленное программирование *
Задачи по копированию отдельных объектов и связных графов часто встречаются в программировании. Методов их решения существует несколько в зависимости от исходных условий и требований. Цель статьи — рассмотреть ключевые разновидности решений, обозначить область применения, выделить преимущества и недостатки.

image
Читать дальше →
Всего голосов 14: ↑8 и ↓6 +2
Просмотры 5.3K
Комментарии 0

Replication Framework • глубинное копирование и обобщённое сравнение связных графов объектов

Программирование *Java *.NET *C# *Промышленное программирование *
Tutorial
Приветствую, читатель!

Хочу познакомить тебя с молодой, но многообещающей библиотекой Replication Framework для платформы .NET (возможно, при наличии достаточного интереса к теме в дальнейшем будет также реализована Java-версия). Библиотека является портабельной (portable) и может быть использована в любом проекте под Microsoft .NET или Mono.

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

image
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 4.8K
Комментарии 9

Фишки XAML-разработчика: условный конвертер

Ненормальное программирование *Программирование *.NET *Промышленное программирование *
Tutorial
Switch Converter заслуживает особенного внимания. Простой и удобный он обладает поразительной универсальностью. На его основе легко построить множество распространённых типов конвертеров без декларирования новых классов и не только… Не верится — добро пожаловать!
image
Читать дальше →
Всего голосов 8: ↑7 и ↓1 +6
Просмотры 6K
Комментарии 0

Фишки XAML-разработчика: композитные конвертеры

Ненормальное программирование *Программирование *.NET *Промышленное программирование *
Tutorial
Статья будет посвящена простому, но эффективному паттерну — Composite Converter [составной конвертер].
image
Читать дальше →
Всего голосов 11: ↑8 и ↓3 +5
Просмотры 6K
Комментарии 0

Фишки XAML-разработчика: встраиваемые конвертеры

Ненормальное программирование *Программирование *.NET *Промышленное программирование *
Tutorial
Разберём интересный и нестандартный сценарий использования конвертеров — Inline Converter.
image
Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 7.8K
Комментарии 6

Фишки XAML-разработчика: динамический Grid

Ненормальное программирование *Программирование *.NET *Промышленное программирование *
Tutorial
В статье рассмотрим несколько полезных усовершенствований для контрола Grid.
image
Читать дальше →
Всего голосов 13: ↑11 и ↓2 +9
Просмотры 17K
Комментарии 11

Циклические срезы, сдвиги и вращения коллекций

Ненормальное программирование *Программирование *.NET *Промышленное программирование *
Одна из типовых задач при работе с коллекциями и массивами — выборка n элементов, начиная с i-того индекса, или же, как вариант, выборка элементов с i-того по j-й индекс. На языке C# с использованием методов-расширений библиотеки Linq решается она очень просто:

var selectedItems = items.Skip(i).Take(n).ToArray();
var selectedItems = items.Skip(i).Take(j - i).ToArray();

Для строк предусмотрен специальный метод Substing:

var target = source.Substing(i, n);
var target = source.Substing(i, j - i);
var target = source.Substing(i); // from i to end

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

image
Читать дальше →
Всего голосов 16: ↑7 и ↓9 -2
Просмотры 6.6K
Комментарии 69

Аудиокодек своими руками — это просто

Разработка веб-сайтов *Программирование *
Tutorial
актуальная редакция статьи на сайте Makeloft

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

Пора снять завесу, отворить дверцу и воочию взглянуть на таинственный алгоритм будоражащий умы и сердца, добро пожаловать на сеанс с разоблачением!


Читать дальше →
Всего голосов 29: ↑26 и ↓3 +23
Просмотры 31K
Комментарии 28

Aero Framework — новое дыхание WPF. Поднимаемся выше MVVM

Программирование *.NET *Промышленное программирование *Xamarin *
Aero Framework — передовая библиотека для промышленной и индивидуальной разработки кросс-платформенных XAML-ориентированных приложений с применением концепций MVVM-проектирования. Её основные достоинства — интуитивная ясность, предельная лаконичность, минималистичность и высокое быстродействие.

С версии 2.0 она стала платной для коммерческого использования, но остаётся свободной для учебных целей и проектов с открытым исходным кодом. Стоимость лицензии составляет 30$ на одного разработчика.

Вложив небольшую сумму денег и день-два в углубленное изучение её особенностей, вы сохраните недели и месяцы труда на реальных проектах. Более того, даже если вы опытный разработчик, значительно повысите свой технический уровень, архитектурные навыки и системность мышления. В данный момент всё зависит лишь от вашей усидчивости и трудолюбия. Гарантирую, что оно того стоит.

image
Читать дальше →
Всего голосов 16: ↑8 и ↓8 0
Просмотры 14K
Комментарии 21

Exposable паттерн. Независимые инжекции путём экспанирования

Программирование *.NET *
Tutorial
Disposable паттерн (интерфейс IDisposable) предполагает возможность высвобождения некоторых ресурсов, занимаемых объектом, путём вызова метода Dispose, ещё до того момента, когда все ссылки на экземпляр будут утрачены и сборщик мусора утилизирует его (хотя для надёжности вызов Dispose часто дублируется в финализаторе).

Но существует также обратный Exposable паттерн, когда ссылка на объект становится доступной до момента его полной инициализации. То есть экземпляр уже присутствует в памяти, частично проинициализирован и другие объекты ссылаются на него, но, чтобы окончательно подготовить его к работе, нужно выполнить вызов метода Expose. Опять же данный вызов допустимо выполнять в конструкторе, что диаметрально вызову Dispose в финализаторе.

Само по себе наличие такой обратной симметрии выглядит красиво и естественно, но где это может пригодиться на практике постараемся раскрыть в этой статье.

Читать дальше →
Всего голосов 13: ↑11 и ↓2 +9
Просмотры 14K
Комментарии 74

Сахарные инжекции в C#

Программирование *.NET *
Tutorial
C# — продуманный и развитый язык программирования, в котором предусмотрено немало синтаксического сахара, упрощающего написание рутинного кода. Но всё-таки существует ряд сценариев, где нужно проявить некоторую смекалку и изобретательность, чтобы сохранить стройность и красоту.

В статье мы рассмотрим некоторые такие случаи, как широкоизвестные, так и не очень.

Читать дальше →
Всего голосов 36: ↑29 и ↓7 +22
Просмотры 41K
Комментарии 96

Совершенствуем xaml: Bindable Converters, Switch Converter, Sets

Программирование *.NET *
Нужно признать, xaml-код бывает отчасти многословным, что вызывает иногда некоторый дискомфорт при разработке. В статье рассмотрим оптимизации, которые помогут существенно улучшить организацию разметки и сделать её более читаемой. Особенно это касается работы с конвертерами, которые неотъемлемо связаны с механизмом привязки данных.

Нам понадобятся некоторые знания из прошлых статей, в частности, понимание принципа прямых инжекций.

Читать дальше →
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 7.1K
Комментарии 0

Командно-ориентированная навигация в xaml-приложениях

Программирование *.NET *
Недавно мы уже узнали о принципе прямых инжекции и эффективном связывании вью-моделей с представлениями, а также о том, каким образом создавать расширения привязки. Продолжим исследование библиотеки Aero Framework и рассмотрим ещё один архитектурный вопрос.

Навигация между представлениями (экранами) в xaml-ориентированных приложениях довольно важная и интересная задача. Особенно это касается её реализации в рамках паттерна MVVM. В идеале вью-модели не должны содержать никаких прямых ссылок на представления, чтобы быть кросс-платформенными и сохранялась возможность повторного их использования в нескольких проектах. Сегодня мы узнаем, как этого достичь.

Читать дальше →
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 4.5K
Комментарии 0

Инжекторы контекста xaml

Программирование *.NET *
В предыдущей части мы познакомились с расширениями привязки и разобрались, как их применять на практике, например, для локализации. Сегодня же продолжим изучать особенности библиотеки Aero Framework и рассмотрим довольно интересную тему об инжекции контекста данных в xaml-разметку представлений, а заодно применим познания из прошлой статьи.

На практике часто встречается следующая задача: связать вью-модель, которая хранится в unity-контейнере, с одним или несколькими её представлениями (экранами). Обычно такое связывание происходит в бехаинд-коде, в результате чего у представления устанавливается нужное значение в свойство DataContext.

Во многих случаях это работает хорошо, но с таким подходом сопряжены определённые нюансы и трудности. Например, они касаются контекстных меню и другой всплывающей анимации, поскольку она не входит в визуальное дерево, а следовательно, для неё становится недоступным основной контекст данных. Другой случай связан с работой списковых элементов, когда контекстом уже является элемент списка, но есть необходимость в использовании другого источника привязки. Третий вариант возникает, когда одно представление работает сразу с несколькими вью-моделями.

Все эти трудности так или иначе решаемы, но существует универсальный и очень простой способ их красиво разрешить. О нём и пойдет речь.

Читать дальше →
Всего голосов 16: ↑14 и ↓2 +12
Просмотры 8.2K
Комментарии 23
1

Информация

В рейтинге
4,488-й
Зарегистрирован
Активность