使用New-Module -AsCustomObject创建派生的自定义类型

时间:2013-04-16 12:59:48

标签: powershell

是否可以使用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

2 个答案:

答案 0 :(得分:1)

AFAIK这在普通的PowerShell中不起作用(至少没有达到某种程度),但应该可以使用this

答案 1 :(得分:0)

动态模块中有强大的魔力,但它们有时会表现得很奇怪。但是,这似乎有效。我添加了一个scriptblock以及一个noteproperty,只是为了证明它是可行的。关注数组。

    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