Ускорители типа PowerShell: PSObject против PSCustomObject
В PowerShell v3.0PSCustomObject
был представлен. Это какPSObject
, но лучше. Среди других улучшений (например, сохранение порядка свойств) создание объекта из хеш-таблицы упрощено:
[PSCustomObject]@{one=1; two=2;}
Теперь кажется очевидным, что это утверждение:
[System.Management.Automation.PSCustomObject]@{one=1; two=2;}
будет работать так же, потому чтоPSCustomObject
"псевдоним" для полного пространства имен + имя класса. Вместо этого я получаю ошибку:
Не удается преобразовать значение «System.Collections.Hashtable» типа «System.Collections.Hashtable» в тип «System.Management.Automation.PSCustomObject».
Я перечислил ускорители для обоих типов объектов:
[accelerators]::get.GetEnumerator() | where key -Like ps*object
Key Value
--- -----
psobject System.Management.Automation.PSObject
pscustomobject System.Management.Automation.PSObject
и обнаружил, что оба ссылаются на одно и то жеPSObject
класс - это должно означать, что использование ускорителей может сделать кучу других вещей, чем просто сделать код короче.
Мои вопросы по этому вопросу:
У вас есть интересные примеры различий между использованием ускорителя и использованием полного имени типа?Следует ли избегать использования полного имени типа всякий раз, когда акселератор доступен в качестве общей рекомендации?Как проверить, возможно, используя отражение, если ускоритель делает что-то другое, чем просто указание на базовый класс?