什么是 Add-Type 与方括号?

要使用 .net 类型,我通常先执行 Add-Type,然后使用 New-Object

Add-Type -AssemblyName "System.Windows.Forms"
$win = New-Object Windows.Forms.Form

但实际上我也可以只使用方括号语法来引用类型并使用静态方法:

$win = [System.Windows.Forms.Form]::new()

它们之间有什么区别?我还没有找到很多关于 .Net 类型的方括号语法的文档。我找到的所有关于方括号的文档都是针对数组的。

vipxiangyu 回答:什么是 Add-Type 与方括号?

Add-Type 仅用于将 .NET 类型加载到会话中(或通过临时编译定义它们)。

要通过调用它们的构造函数使用这些类型,您有两个选择:

  • 任何PowerShell版本中:

  • 最好在 PowerShell v5+ 中:

    • 使用类型文字 ([...]) 并调用该类型的(PowerShell 提供的)静态 ::new() 方法。
    • 有关 PowerShell 类型文字的详细信息,请参阅 this answer

Lee_DaileyTheo 所述,使用静态 ::new() 方法有几个优点:

  • 调用 ::new() 更快;一个或只有几个构造函数调用可能无关紧要,但它可能会在循环中。

  • 只执行::new 不带括号显示所有构造函数重载,这是找出构造函数参数的便捷方法em> 是必需的,它们的类型是什么。

  • 调用 ::new() 不会将新创建的实例包装在一个 - 大多数 - 不可见的 [psobject] 包装器中,New-Object 和 cmdlet 通常会这样做;虽然此包装器大多是良性的,但它可能会导致行为上的细微差异 - 请参阅 GitHub issue #5579

请注意,由于 PowerShell 的两个基本 parsing modesNew-Object::new() 需要不同的语法,如 this answer 中所述。 >

本文链接:https://www.f2er.com/977.html

大家都在问