.NET 4.5 включает в себя некоторые изменения к System.Reflection. Самое значительно из них это то, что Type теперь разделён на два отдельных класса: Type и TypeInfo. Объект TypeInfo хранит в себе полное определение, а сам Type теперь хранит только общие данные. Если вы используете рефлексию из вашего десктопного или веб-приложения под NET 4.5, то старое API до сих пор тоже доступно наряду с новыми методами рефлексии. Сегодня я сфокусируюсь на том, как использовать некоторые из основных функций нового API.Читать полностью »
Рубрика «reflection» - 5
Новое в рефлексии для .NET 4.5
2012-12-03 в 8:27, admin, рубрики: .net, .net 4.5, reflection, ПрограммированиеПростые стейт-машины на службе у разработчика
2012-11-26 в 10:08, admin, рубрики: framework, FSM, GoF, KISS, reflection, XML, конечный автомат, Программирование, метки: c++, framework, FSM, GoF, kiss, reflection, XML, конечный автоматПредставьте на минутку обычного программиста. Допустим, его зовут Вася и ему нужно сделать анимированную менюшку на сайт/десктоп приложение/мобильный апп. Знаете, которые выезжают сверху вниз, как меню у окна Windows или меню с яблочком у OS X. Вот такое.
Начинает он с одного выпадающего окошка, тестирует анимацию, выставляет ease out 100% и наслаждается полученным результатом. Но вскоре он понимает, что для того, чтобы управлять менюшкой, хорошо бы знать закрыто оно сейчас или нет. Мы-то с вами тут программисты опытные, все понимаем, что нужно добавить флаг. Не вопрос, флаг есть.
var opened = false;
Вроде, работает. Но, если быстро кликать по кнопке, меню начинает моргать, открываясь и закрываясь не успев доанимироваться в конечное состояние. Вася добавляет флаг animating. Теперь код у нас такой:
var opened = false;
var animating = false;
function onClick(event) {
if (animating) return;
if (opened) close();
else open();
}
Через какое-то время Васе говорят, что меню может быть полностью выключено и неактивно. Не вопрос! Мы-то с вами тут программисты опытные, все понимаем, что… нужно добавить ЕЩЕ ОДИН ФЛАГ! И, всего-то через пару дней разработки, код меню уже пестрит двустрочными IF-ами типа вот такого:
if (enabled && opened && !animating && !selected && finishedTransition && !endOfTheWorld && ...) { ... }
Вася начинает задаваться вопросами: как вообще может быть, что animating == true и enabled == false; почему у него время от времени все глючит; как тут вообще поймешь в каком состоянии находится меню. Ага! Состояния... О них дальше и пойдет речь.
Знакомьтесь, это Вася.
Вычисляемые поля для любого LINQ-провайдера
2012-10-22 в 20:50, admin, рубрики: .net, linq, reflection, ненормальное программирование, Программирование, метки: .net, linq, reflectionПривет!
Сегодня я хочу рассказать, о маленькой библиотеки, которую я написал недавно на коленке всего за несколько часов. Эта библиотека может декомпилировать методы в их λ-представление.
Зачем это может понадобиться — под катом. Читать полностью »
Unity3D 3.x Получение текущего активного окна
2012-08-15 в 11:47, admin, рубрики: game development, GUI, reflection, unity3d, метки: c++, gui, reflection, unity3d Недавно перед нашей командой встала довольно простая задача. Нам нужно было сделать перетаскивание вещи из инвентаря в другие окна (эквип, сундук). Если два окна находятся друг над другом, то вещь должна упасть в то окно, которое выше.
Бегло осмотрев список свойств в классе GUI я не нашел чего-либо подходящего, потом я осмотрел GUIUtility, и даже заглянул в GUILayout. Вообщем такого свойства нигде не было. Гугление по этому запросу выдает несколько вопросов в Q&A и пару скудных постов на офф. форуме которые заканчиваются ответами в стиле «так сделать нельзя, но можно вручную отслеживать по какому окну нажали мышкой и заполнять переменную активного окна самостоятельно».
Нам не подошло ничего из того что там предлагали, но один парень натолкнул меня на интересную мысль. Мы пишем код на C#, а значит можем пользоваться всеми плюсами этого языка, в том числе и С# Reflection
Читать полностью »
Кроссбраузерное отражение элементов на CSS3
2012-05-28 в 6:44, admin, рубрики: css3, reflection, Песочница, метки: css3, reflection
На сегодняшний день уже существуют box-reflect и mask-image, которые позволяют создавать отражение элементов, но данные свойства доступны только в Safari и Chrome, да и работают не так как хотелось бы. Поэтому я хочу рассказать Вам как реализовать кроссбраузерное отражение на CSS.
Читать полностью »
Отделение логики базы данных (попытка №2)
2012-05-27 в 14:25, admin, рубрики: generic object, mongodb, reflection, Программирование, Совершенный код, метки: c++, generic object, mongodb, reflectionПервая попытка получилась немного сумбурна, поэтому я решил написать более последовательно.
Повторим основную идею: работу с базой нужно организовать через специально заточенный класс, а не разбрасывать код вызовов по всему проекту.
Но этому может препятствовать то, какой интерфейс предлагают производители баз данных. Мы потренируемся на базе MongoDB.
Здесь я предложу реализацию следующей логики работы:
Должен быть базовый класс, от которого наследуются все классы, которые будем сохранять в базе, пусть это будет DBData. Тогда у него будут просто 3 метода: Load, Save, Delete. А обращение к базе уже будет делом DBData.
Польза от такой концепции должна быть очевидна — пользователь объектов может не думая о реализации и нюансах баз данных просто сохранять и восстанавливать свои объекты. Но на этом пути есть ряд сложностей. Рассмотрим их.
Отделение логики базы данных, а также отображение обобщенных методов
2012-05-26 в 18:30, admin, рубрики: generic object, mongodb, reflection, Программирование, Совершенный код, метки: c++, generic object, mongodb, reflectionПредисловие
В моем первом посте на Хабре завязался такой диалог:
A. важно, что к базе нельзя обращаться прямо, только через хранимые-процедуры, а за вызов хранимой процедуры ответственен определенный класс
B. «только через хранимые-процедуры» — что же вы NoSQL-продуктам скажете?
Дальше акцент сместился SQL vs. NoSQL. Но были потеряны основы: работу с базой нужно организовать через специально заточенный класс, а не разбрасывать код вызовов по всему проекту.
Я по прежнему считаю, что NoSQL — это слишком молодые продукты, чтобы они могли конкурировать с реляционными базами на полном серьезе. Но у NoSQL и несколько другая ниша. Мне понадобилось некоторое сохранение данных в проекте, где нет больших объемов. И поэтому я решил попробовать MongoDB. (я бы лучше поработал бы с Oracle NoSQL Database, но не нашел как с этим работать на C#).
Ну в общем все достаточно хорошо, чтобы сохранить объект в базе, оказалось надо сделать совсем мало:
var collection = db.GetCollection();
collection.Save(argObject);
где StrategiesData — тип моего объекта, argObject — собственно мой объект. Но такой стиль поощряет раскидывать как раз обращение к базе по всему проекту. Мешает явное указание типа вида . Ну, что остается отображение. Об этом и поговорим.
Ограничения через реализацию интерфейса против свободы через рефлекшн
2012-04-16 в 13:25, admin, рубрики: interfaces, java, reflection, метки: interfaces, java, reflection В последнее время очень часто появляются фреймворки которые позволяют разработчику реализовывать функционал в свободном виде не прибегая к наследованию от интерфейсов. Примеры можно увидеть в таких как EJB 3, JUnit 4, JSF 2, Spring Framework 3 и т.д.
Под катом найдете обсуждение обоих подходов.
Читать полностью »
Практическое использование PHP Reflection
2012-03-09 в 10:29, admin, рубрики: php, reflection, метки: PHP, reflectionЗахотелось мне прописывать экшны и параметры с проверкой в моем контроллере примерно таким образом:
class Controller { /** * Тестовое действие * @a /^[0-9]+$/i * @b /^[0-9a-z]+$/i */ function testAction ( $a, $b = 'something' ) { echo 'a: '.$a.', b: '.$b; } }
Идею прописывать необходимые параметры передаваемые в URL прямо в аргументах функции я подглядел в Symfony2. Там же использовались комментарии PHPdoc для определения маршрутов. Выглядело это как чудо и я решил разобраться магия это или наука.
Disclaimer!
Всё написанное не претендует на технологическую новизну, а является демонстрацией возможностей PHP Reflection API. Преобразователь ЧПУЧитать полностью »