Решение "Статический 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 платформами его судя по всему не будет.
#задачка
Post #662
1.18K
Григорий Дядиченко Задачка "Статический generic класс" Пишу небольшой репозиторий, который покажет пример работы с рефлексей и атрибутами в Unity, и тут сделаем небольшую задачку на знание шарпа вдохновлённый им. Есть класс public static class UIRouteManager<T> и у него конструктор…Docs Classes - C# language specification This chapter covers class declarations, including all member types that can be included in classes. This includes generic classes as well as non-generic classes.
- 👍 1