PowerShell 4.0 及更低版本中不使用 New-Object 的构造函数调用语法

问题描述 投票:0回答:1

今天我遇到了一些旧代码,这激起了我的好奇心。 我知道在 PowerShell 4.0 中实例化 .NET 对象有 2 种不同的语法方式

# Using New-Object to pass multiple args to the constructor
$ex = New-Object -TypeName System.IO.FileNotFoundException -ArgumentList 'No File Found!', 'C:\NoFile.txt'


# Alternate Syntax - how can you pass multiple args?
$ex = [System.IO.FileNotFoundException] 'No File Found!'

问题:

  1. 这个替代语法记录在哪里? 我还没有在网上找到任何官方文档。
  2. 如何使用这种替代语法传递多个参数并调用特定的构造函数重载?
  3. 这种替代语法有名称吗?
.net powershell constructor powershell-4.0
1个回答
0
投票

这个替代语法记录在哪里?

6.18 .NET Conversion 中,当满足其中一个转换规则时,您可以通过强制转换来创建对象。其中最常见的是:

  • 构造函数:如果目标类型有一个构造函数采用单个参数,且其类型是源类型的类型,则调用该构造函数来执行转换。

    class Foo {
        [string] $FooProp
    
        Foo([string] $foo) {
            $this.FooProp = $foo
        }
    }
    
    [Foo] 'OK!'
    
  • Parse 方法:如果源类型是 string 并且目标类型有一个名为 Parse 的方法,则调用该方法来执行转换。

    class Foo {
        [string] $FooProp
    
        static [Foo] Parse([string] $foo) {
            return [Foo]@{ FooProp = $foo }
        }
    }
    
    [Foo] 'OK!'
    
  • 显式转换运算符:如果源类型具有转换为目标类型的显式转换运算符,则调用该运算符来执行转换。如果目标类型具有从源类型进行转换的显式转换运算符,则会调用该运算符来执行转换。

    class Foo {
        [string] $FooProp
    
        static [Foo] op_Explicit([string] $foo) {
            return [Foo]@{ FooProp = $foo }
        }
    }
    
    [Foo] 'OK!'
    

如何使用这种替代语法传递多个参数并调用特定的构造函数重载?

你不能。更接近的可能是在 5.1 中,他们将允许您使用哈希表文字进行实例化

class Foo {
    [string] $FooProp
    [string] $BarProp
}

[Foo]@{ FooProp = 'OK!'; BarProp = '123' }
© www.soinside.com 2019 - 2024. All rights reserved.