PowerShell-Beschleuniger: PSObject vs PSCustomObject

In PowerShell v3.0PSCustomObject wurde vorgestellt. Es ist wiePSObject, aber besser. Neben anderen Verbesserungen (z. B. die Beibehaltung der Eigenschaftsreihenfolge) wird das Erstellen von Objekten aus Hashtabellen vereinfacht:

[PSCustomObject]@{one=1; two=2;}

Nun scheint es offensichtlich, dass diese Aussage:

[System.Management.Automation.PSCustomObject]@{one=1; two=2;}

würde genauso funktionieren, weilPSCustomObject ist ein "Alias" für vollständigen Namespace + Klassenname. Stattdessen erhalte ich eine Fehlermeldung:

Kann den Wert "System.Collections.Hashtable" vom Typ "System.Collections.Hashtable" nicht in "System.Management.Automation.PSCustomObject" konvertieren.

Ich habe die Beschleuniger für beide Objekttypen aufgelistet:

[accelerators]::get.GetEnumerator() | where key -Like ps*object

    Key            Value
    ---            -----
    psobject       System.Management.Automation.PSObject
    pscustomobject System.Management.Automation.PSObject

und entdeckte, dass beide auf dasselbe @ verweisPSObject class - das muss bedeuten, dass die Verwendung von Beschleunigern eine Menge anderer Dinge bewirken kann, als nur den Code zu verkürzen.

Meine Fragen zu diesem Problem lauten:

Haben Sie einige interessante Beispiele für Unterschiede zwischen der Verwendung eines Beschleunigers und der Verwendung des vollständigen Typnamens? Sollte die Verwendung des vollständigen Typnamens vermieden werden, wenn ein Beschleuniger als allgemeine Best Practice verfügbar ist?Wie kann man mithilfe von Reflektion überprüfen, ob ein Beschleuniger andere Aufgaben ausführt, als nur auf die zugrunde liegende Klasse zu zeigen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage