Ускорители типа 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 класс - это должно означать, что использование ускорителей может сделать кучу других вещей, чем просто сделать код короче.

Мои вопросы по этому вопросу:

У вас есть интересные примеры различий между использованием ускорителя и использованием полного имени типа?Следует ли избегать использования полного имени типа всякий раз, когда акселератор доступен в качестве общей рекомендации?Как проверить, возможно, используя отражение, если ускоритель делает что-то другое, чем просто указание на базовый класс?

Ответы на вопрос(2)

Ваш ответ на вопрос