PowerShell 4.0及更早版本无需New-Object的构造函数调用语法
PowerShell 4.0中.NET对象实例化替代语法的相关问题解答
我近日碰到一段旧代码,由此产生了疑问。我知道PowerShell 4.0里有两种.NET对象实例化的语法:
# 使用New-Object向构造函数传递多个参数 $ex = New-Object -TypeName System.IO.FileNotFoundException -ArgumentList 'No File Found!', 'C:\NoFile.txt' # 替代语法——如何传递多个参数? $ex = [System.IO.FileNotFoundException] 'No File Found!'
补充说明
class关键字及相关类支持功能是2016年随PowerShell 5.0引入的。- PowerShell 5.0还正式开放了原生.NET类构造函数方法。
- 在新版本PowerShell中,
New-Objectcmdlet已不再是推荐用法,如今仅用于向后兼容(比如PowerShell 4.0场景),或是编写支持多代操作系统/PowerShell版本的脚本、函数和模块。
1. 该替代语法的官方文档在哪里?
PowerShell 4.0的官方文档中,这种语法被归类在类型加速器的实例化用法下,但早期文档对这个特性的描述比较零散,需要定位到PowerShell 4.0的专属文档板块查看相关说明。
2. 如何使用该替代语法传递多个参数并调用特定的构造函数重载?
要传递多个参数,只需将参数用逗号分隔,放在括号中(PowerShell 4.0里括号可选,但为了明确性建议添加),PowerShell会自动匹配对应的构造函数重载:
# 传递两个参数,匹配接受(string, string)的构造函数 $ex = [System.IO.FileNotFoundException]('No File Found!', 'C:\NoFile.txt')
如果存在多个重载导致匹配歧义,可以通过显式指定参数类型来引导PowerShell选择正确的构造函数:
# 明确指定参数类型,匹配特定重载 $ex = [System.IO.FileNotFoundException]([string]'No File Found!', [string]'C:\NoFile.txt')
3. 该替代语法是否有特定名称?
这种语法没有官方专属命名,社区通常称它为类型加速器实例化语法或者方括号构造函数语法。它本质是PowerShell类型加速器的扩展用法,允许直接通过类型名的方括号表示法调用构造函数。
内容的提问来源于stack exchange,提问作者Paul π
相关产品推荐
相关产品推荐

