2

是否可以使用 New-Module cmdlet 创建从另一个自定义类型派生的自定义类型?

例子:

function New-Shape
{
    New-Module -ArgumentList $args -AsCustomObject {
        param (
            [string]$position
            )
        {
            $script:position = $position
        }

        Export-ModuleMember -Variable Position
    }
}

function New-Circle
{
    # How to derive Circle from Shape?
    New-Module -ArgumentList $args -AsCustomObject {
        param (
            [string]$radius
            )
        {
            $script:radius = $radius
        }

        Export-ModuleMember -Variable Radius
    }
}

# So that we can do

$circle = New-Circle $position $radius

$circle.Position
$circle.Radius
4

2 回答 2

1

AFAIK 这在普通的 PowerShell 中不起作用(至少不需要花费一些时间),但是应该可以使用.

于 2013-04-16T19:03:47.747 回答
0

动态模块有强大的魔力,但它们有时会表现得很奇怪。但是,这似乎有效。我添加了一个脚本块和一个注释属性,只是为了证明它是可行的。小心数组。

    function New-Shape
    {
        New-Module -ArgumentList $args -AsCustomObject {
            param (
                [string]$position
            )
            {
                $script:position = $position
            }

            Export-ModuleMember -Variable Position
        }
    }

    function New-Circle
    {
        param
        (
            [string]$position,
            $radius
        )

        $circle = new-shape $position
        $circle | Add-Member -NotePropertyName radius -NotePropertyValue $radius
        $circle | Add-Member -PassThru -MemberType ScriptProperty -Name "Circumference" -force -Value {
            $this.radius * [math]::Pi * 2
        }
    }

    $MyCircle = new-circle '34,3'  2.56
    $myCircle.position
    $myCircle.radius
    $MyCircle.Circumference
    $MyCircle | gm
于 2016-07-21T09:01:43.103 回答