входит полностью, или только то, от чего зависит проект?
и насколько плохая практика повторять один и тот же неймспейс в разных скриптах, если есть возможность ссылаться на один скрипт?
где то слышал (вроде у Сакутина, если кто знает), что это не есть хорошо, могу что то путать
возможно, ты путаешь неймспейс со сборками (*.asmdef) код в билд попадает сборками. если там есть неймспейс, оно попадает целиком
а если я дублирую неймспейс в других скриптах, они все будут ссылаться на одно и то же место в проекте? в целом это ведь не засоряет проект?
нет какого-то "места". считай, это префикс к имени класса вместо MyClass будет MyNamespace_MyClass
я имею ввиду, когда я использую using nameSpace в разных скриптах, это ведь не засоряет проект, а создает ссылку на единое место где этот неймспейс лежит?
using MyNamespace_MyClass; ничего не меняется
понял, спасибо
Агась. Представляй namespace как ссылку на внешний ресурс , для текущего ресурса до этого неизвестный Ресурс не будет дублироваться Дублируется просто запоминание одной и той же ссылки, если я правильно поняла вопрос
да, вы правильно поняли вопрос. просто у Сакутина, вроде, слышал, что плохая практика оставлять неиспользуемые ссылки на неймспейс. Почему - не помню, либо он не объяснил, поэтому такое недопонимание осталось
Просто чтобы код не засорять лишними строками, которые ничего не значат. Потом, когда через месяц кто-нибудь откроет скрипт, он сразу по неймспейсам сможет определить, что в коде используется, а что нет.
https://stackoverflow.com/questions/1162766/how-is-performance-affected-by-an-unused-using-directive
плюс еще в питоне была возможность подгрузить отдельный класс из неймспейса, якобы это положительно сказывалось на производительности(опять же, если ничего не путаю)
Не знаю как конкретно Mono с этим работает, но в CLR так: если ты подключил namespace и нигде его не использовал, компилятор не будет его включать в результате
в бидоне это связано с прекомпиляцией скрипта в байткод. тут компиляция происходит до билда
Неймспейсы не сборки, они просто УСЛОВНО разделяют сборку на части. Если в проекте есть ссылка на сборку, то она вся попадет в билд в любом случае, не зависимо от того, какие неймспейсы ты использовал. Это нужно компилятору, чтобы понять какой класс ты хочешь использовать. После компиляции все имена классов будут заменены на полное имя: MyClass станет MyNamespace.MyClass
Потому что лишняя, бессмысленная строчка в коде + автодополнение будет показывать то, что тебе не нужно
Питон совсем другая история, там по другому работает
Смотря что понимать под "включать в результате", потому что оно все равно попадет в билд
там вообще не от рантайма зависит, а от Roslyn и он только фактическое использование учитывает
Фактическое использование чего? Компилятор не будет резать сборку на части, чтобы в билд пихать только одну
фактическое использование всей сборки, естественно
по умолчанию должно работать так: использовал любой тип из сборки - ссылка на неё пометилась как фактически используемая и её включает в билд в Unity не знаю, идёт ли оно в Managed, если фактически не используется Кстати, IL2CPP по умолчанию вырезает неиспользуемый код из сборок, там это настраивается
Roslyn (и скорее всего mono, но в unity используется rosyln) добавляет сборку в билд вне зависимости от того, было ли использовано что то из сборки, если в csproj есть Reference или PackageReference, то оно идет в билд IL2CPP не компилятор шарпа, а речь вроде про компиляторы шарпа
У меня никогда в билд не шли неиспользуемые сборки, когда использовал Rider без Unity
Обсуждают сегодня