47 подписчиков
В ответ на пост
Решение "Статический generic класс"
В комментариях к задаче там уже всё разобрано. Но напишем решение отдельно.
Правильный ответ. Если ничего до этого не вызывалось, то в момент первого вызова методов ShowUI в лог напишется "test". Причём по одному разу для каждой реализации. Под JIT платформами. И связано это с двумя нюансами.
1. Как работает статический конструктор типов
Под JIT платформами статический конструктор типа вызывается при первом обращении к типу (или создании экземпляра типа для не статических классов). Хотя строго говоря это зависит от флагов компиляции, но в Unity можно говорить чуть проще. На эту тему можно почитать спецификацию от майкрософта, как говорили в комментах.
Под AOT платформами у юнити видимо снова баг, что логи не пишутся, как было тут https://issuetracker.unity3d.com/issues/static-constructor-doesnt-work-with-il2cpp Так как на айос логи вообще не появляются. Хотя сам конструктор работает, так что всё в порядке.
2. Как работает шаблонный (генерик) параметр для статических классов
По сути, когда вы пишете UIRouteManager<string> и UIRouteManager<bool> — это два разных типа. Поэтому конструктор вызовется дважды.
Так что под виндой в редакторе лог появится дважды. А под AOT платформами его судя по всему не будет.
#задачка
1 минута
18 января 2023