C#
— невероятно гибкий язык. На нем можно писать не только бэкэнд или десктопные приложения. Я использую C#
для работы, в том числе, и с научными данными, которые накладывают определенные требования на инструменты, доступные в языке. Хотя netcore
захватывает повестку дня (учитывая, что после netstandard2.0
большинство фич как языков, так и рантайма, не бэк-портируются в netframework
), я продолжаю работать и с легаси-проектами.
В этой статье я рассматриваю одно неочевидное (но, наверное, желаемое?) применение Span<T>
и отличие реализации Span<T>
в netframework
и netcore
из-за особенностей clr
.
Рубрика «reflection» - 2
Unsafe.AsSpan: Span<T> как замена указателям?
2019-08-26 в 20:23, admin, рубрики: .net, C#, MSIL, reflection, ненормальное программированиеТестирование аннотаций @NonNull-@Nullable
2019-08-25 в 14:40, admin, рубрики: annotations, bipredicate, cglib, dynamic proxy, framework, invoke, java, java 8, lambda, lombok, lookup, predicate, reflection, retention, spring, spring framework, Stream, testingВместо «Посвящается ...»
Описанная ниже задача не была новаторской или чертовски полезной, компания в которой я работаю не получит за нее прибыль, а я премию.
Но эта задача была, а значит ее пришлось решить.
Intro
В статье вы часто будете встречать слово Lombok, прошу хейтеров не торопиться с выводами.
Я не собираюсь «топить» за Lombok или его отсутствие, я как Геральт Сапковского, стараюсь хранить нейтралитет, и могу спокойно и без дрожи в веке читать код как с Lombok, так и без оного.
Но на текущем проекте упомянутая библиотека присутствует, и что-то подсказывает мне, что наш проект такой не единственный.
Так вот.
Читать полностью »
Свой конвертер JSON или ещё немного про ExpressionTrees
2019-08-21 в 10:45, admin, рубрики: .net, C#, deserialization, example, expression trees, json, json.net, reflection, serializationСериализация и десериализация — типичные операции, к которым современный разработчик относится как к тривиальным. Мы общаемся с базами данных, формируем HTTP-запросы, получаем данные через REST API, и часто даже не задумываемся как это работает. Сегодня я предлагаю написать свой сериализатор и десериализатор для JSON, чтобы узнать, что там «под капотом».
Читать полностью »
Свой mapper или немного про ExpressionTrees
2019-08-16 в 13:29, admin, рубрики: .net, automapper, C#, example, expression, expression trees, reflectionСегодня мы поговорим про то, как написать свой AutoMapper. Да, мне бы очень хотелось рассказать вам об этом, но я не смогу. Дело в том, что подобные решения очень большие, имеют историю проб и ошибок, а также прошли долгий путь применения. Я лишь могу дать понимание того, как это работает, дать отправную точку для тех, кто хотел бы разобраться с самим механизмом работы «мапперов». Можно даже сказать, что мы напишем свой велосипед.
Читать полностью »
Что такое Method Handles в Java
2018-12-03 в 14:31, admin, рубрики: java, method handle, reflection, Блог компании Haulmont1. Вступление
В этом туториале мы рассмотрим важный API, представленный в Java 7 и расширенный в новых версиях, java.lang.invoke.MethodHandles.

Мы узнаем, что такое method handles, как их создавать и использовать.
Реализация Spring Framework API с нуля. Пошаговое руководство для начинающих. Часть 1
2018-08-30 в 12:44, admin, рубрики: annotations, container, di, ioc, java, java core, reflection, Spring Core, ПрограммированиеSpring Framework является одним из самых сложных фремворков для понимания и изучения. Большинство разработчиков изучают его медленно, через практические задачи и гугл. Этот подход не эффективен, так как не даёт полной картины и при этом требует больших затрат.
Я хотел бы предложить вам принципиально новый подход к изучению Спринга. Он заключается в том, что человек проходит через серию специально подготовленных туториалов и самостоятельно реализует функционал спринга. Особенность этого подхода в том, что он, помимо 100%-го понимания изучаемых аспектов Spring даёт ещё большой прирост в Java Core (Annotations, Reflection, Files, Generics).
Статья подарит вам незабываемые ощущения и позволит почувствовать себя разработчиком Pivotal. Шаг за шагом, вы сделаете ваши классы бинами и организуете их жизненный цикл (такой же, как и в реальном спринге). Классы, которые вы будете реализовывать — BeanFactory, Component, Service, BeanPostProcessor, BeanNameAware, BeanFactoryAware, InitializingBean, PostConstruct, PreDestroy, DisposableBean, ApplicationContext, ApplicationListener, ContextClosedEvent.
Читать полностью »
Метапрограммирование в JavaScript
2018-07-16 в 17:40, admin, рубрики: javascript, reflect api, reflection, Блог компании ДоксВижнМетапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы, либо программ, которые меняют себя во время выполнения. (Википедия)
Говоря более простым языком, метапрограммированием в рамках JavaScript можно считать механизмы, позволяющие анализировать и менять программу в режиме реального времени в зависимости от каких-либо действий. И, скорее всего, вы так или иначе используете их при написании скриптов каждый день.
Инстанцируем java.lang.Class
2017-11-12 в 14:24, admin, рубрики: bytecode, java, magic, methodhandles, reflection, unsafe, ненормальное программированиеКонструктор java.lang.Class
является одной из самых охраняемых сущностей в языке Java. В спецификации чётко сказано, что объекты типа Class
может создавать только сама JRE и что нам тут делать нечего, но так ли это на самом деле?
Предлагаю погрузиться в глубины Reflection API (и не только) и выяснить, как там всё устроено и насколько трудно будет обойти имеющиеся ограничения.