В некотором беспорядочном порядке:
это чепуха; какой термин System
должен все равно означать?
Рассматриваемая «система» - это. NET среда выполнения и инфраструктура. Первоначальная идея, насколько я понимаю, заключалась в том, что код, который не поставляется с с . NET, попадет в разные пространства имен - но несколько компонентов, созданных Microsoft, построенных поверх. NET, имеют с тех пор использовал System
родительское пространство имен - включая все API, которые составляют сам PowerShell.
Я часто задаюсь вопросом, почему все-таки существует пространство имен [a] System
, поскольку все находится внутри этого пространства имен так что же делать с этим пространством имен?
Не "все" находится внутри пространства имен System
, но, как уже упоминалось выше, все, что поставляется с библиотекой времени выполнения или базового класса, - именно поэтому PowerShell автоматически разрешает литералы типов, даже если вы опускаете System.
в квалифицированном имени типа - PowerShell пытается помочь вам сократить ввод уже
Существуют ли какие-либо причины и указываются c Ситуация, когда требуется ввести Системные и аналогичные родительские пространства имен?
Да - когда родительское пространство имен равно * 1 028 * not System
.
Первый пример, который приходит на ум, - классы-оболочки. NET для API реестра Win32 в Windows:
$HKLM = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Default)
Теперь по фактическому вопросу:
Я хочу уменьшить число набираемых System
и других root пространств имен
Вы не можете добавлять пользовательские префиксы пространства имен (например, System
) для метода разрешения имен PowerShell, но вы можете объявить автоматическое c разрешение имен типов в специфицированных c пространствах имен в PowerShell 5 и более поздних версиях с using namespace
директива .
Без using namespace
:
[System.Net.Dns]::GetHostEntry("192.168.1.1")
С using namespace
:
using namespace System.Net
[Dns]::GetHostEntry("192.168.1.1")
При использовании в сценарии любые директивы using
должны предшествовать чему-либо еще в файле, включая блок param
. Директивы
using namespace
будут работать и в интерактивном сеансе, при условии, что вы выдадите их в виде отдельного оператора:
PS> using namespace System.Net
PS> [Dns] # still works!