Найти тему
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 минута