В общем есть некоторый кастомный аттрибут, который я закрепляю за методами.
Затем мне нужно этот атрибут достать. Но в чем проблема - этот атрибут может встретиться где угодно.
Сначала я подумал - да чего там, сейчас мигом это исправлю
И написал вот такой код
""
foreach (Assembly a in…
11 2 667
0
27
9 лет назад
0
alexprey, вполне даже ожиданно. У меня программа перебирала все классы внутри каждой сборки. А меньше сборок - меньше классов.
0
29
9 лет назад
0
Extravert, неожиданно) Да тогда круто
0
27
9 лет назад
0
alexprey, заметно. Подвисание пропало :)
0
29
9 лет назад
0
Extravert, сильно выросло по скорости?
0
27
9 лет назад
Отредактирован Devion
0
alexprey, да я уже примерно так и сделал :)
0
29
9 лет назад
0
Extravert, а ты смотрел какие сборки он возвращает, мб стоит из этого списка исключить системные? И еще наверное все же попробовать использовать не GetTypes а GetExportedTypes
В общем сегодня пришлось слишком много работать с рефлексией, доставая кучу интерналовских функций и полей из библиотеки. Работал себе, работал, а потом подумал - а чего бы не упростить?
5 2 108
0
14
9 лет назад
0
Extravert, в качестве инструмента конечно! Даже если что-то и накроется, так всегда можно поправить.
0
27
9 лет назад
Отредактирован Devion
0
Kozinaka, очень многое, что вряд ли изменят.
Например теги GUILayout.Group, буфер обмена, ручной запуск ребилда, приоритеты и параметры окон, почти всю инфу касательно существующих окон - типа дебаг лога (нативный лог в юнити очень ограниченный, скажем нельзя по стеку вызовов обратиться к какой либо строке, зато самому такое написать можно). В целом часто чтобы сделать что то нестандартное или влияющее на сам юнити нужно обращаться к функциям, которые спрятаны инкапсуляцией.
Медленно, да, но во-первых - тут ничего не попишешь, во-вторых, это же для создания инструмента а не для конечного игрока делается, и то где это применяется часто иной способ реализовать такое либо отсутствует либо выйдет еще дороже.
Потому бегать от рефлексии глупо. Да и скажем если это какой нибудь алгоритм то там терпимо, так как он вызывается единожды, а не постоянно. Ну и на всякий пожарный всегда можно кешировать вычисления.
Ну и чаще все таки все остается как есть, хотя, конечно вероятность что завтра этих скрытых функций не станет всегда имеется. Но это на самом деле не шибко высокая вероятность за тот период времени когда в таком инструменте есть нужда. Ту же юньку 4 как я понимаю уже допиливать особо не будут, а будут уже делать пятую версию.
0
14
9 лет назад
0
Ох, стрёмно это. Cегодня они есть, а завтра нет, или зарефакторят им другую логику работы, интерфейс сменят. . К тому же медленней прямых вызовов на несколько порядков.
Что там в юнити такого полезного от любопытных спрятали?
0
27
9 лет назад
0
alexprey, ну смотри
Вот например я много знаю интерналовских и приватных функций которые в том же юнити нельзя вызвать напрямую. Но они очень нужны бывают, просто разрабы решили что это никому не пригодится
Вон пример кинул
чтобы обычным путем найти интерналовский метод в классе приватной переменной хранящейся в другом интерналовском классе приходится делать дико непростое выражение. То есть заместо простого
СтатическийКласс1.объект2.НужныйМетод()
Мы вынуждены писать дикие конструкции в рефлексии.
А эта фигня делает эти обращения проще, однострочником
Например
Go<СтатическийКласс1>().ToField("объект2").ToMethod("НужныйМетод").Call()
Все проще чем вручную вытаскивать классы, фильтровать списки членов и прочая хрень.