Помощь в развитии
Помогите новичкам освоить языки программирования!
Не будьте жадными на коротенькие статейки! ;)
Не будьте жадными на коротенькие статейки! ;)
Программирование
постоянный
Данный проект ориентирован на публикацию статей по технологиям и алгоритмам, присущим программированию в целом, и…
Данный проект ориентирован на публикацию статей по технологиям и алгоритмам, присущим программированию в целом, и относящимся не только к геймдеву.
Уровень:
5
Руководитель:
Рейтинг:
382
Тематика:
Hardware & Software
Создан на сайте:
20.07.2013
Интересные проекты
Комментарии проекта Программирование
[C#] Обращение к аттрибутам
Затем мне нужно этот атрибут достать. Но в чем проблема - этот атрибут может встретиться где угодно.
И написал вот такой код
Отредактирован Devion
Упрощенная рефлексия
Отредактирован Devion
Например теги GUILayout.Group, буфер обмена, ручной запуск ребилда, приоритеты и параметры окон, почти всю инфу касательно существующих окон - типа дебаг лога (нативный лог в юнити очень ограниченный, скажем нельзя по стеку вызовов обратиться к какой либо строке, зато самому такое написать можно). В целом часто чтобы сделать что то нестандартное или влияющее на сам юнити нужно обращаться к функциям, которые спрятаны инкапсуляцией.
Медленно, да, но во-первых - тут ничего не попишешь, во-вторых, это же для создания инструмента а не для конечного игрока делается, и то где это применяется часто иной способ реализовать такое либо отсутствует либо выйдет еще дороже.
Потому бегать от рефлексии глупо. Да и скажем если это какой нибудь алгоритм то там терпимо, так как он вызывается единожды, а не постоянно. Ну и на всякий пожарный всегда можно кешировать вычисления.
Ну и чаще все таки все остается как есть, хотя, конечно вероятность что завтра этих скрытых функций не станет всегда имеется. Но это на самом деле не шибко высокая вероятность за тот период времени когда в таком инструменте есть нужда. Ту же юньку 4 как я понимаю уже допиливать особо не будут, а будут уже делать пятую версию.
Вот например я много знаю интерналовских и приватных функций которые в том же юнити нельзя вызвать напрямую. Но они очень нужны бывают, просто разрабы решили что это никому не пригодится
Вон пример кинул
чтобы обычным путем найти интерналовский метод в классе приватной переменной хранящейся в другом интерналовском классе приходится делать дико непростое выражение. То есть заместо простого
СтатическийКласс1.объект2.НужныйМетод()
Мы вынуждены писать дикие конструкции в рефлексии.
А эта фигня делает эти обращения проще, однострочником
Например
Go<СтатическийКласс1>().ToField("объект2").ToMethod("НужныйМетод").Call()
Все проще чем вручную вытаскивать классы, фильтровать списки членов и прочая хрень.