2013-04-16 38 views
2

是否可以使用New-Module cmdlet從另一個自定義類型創建自定義類型dervied?使用New-Module -AsCustomObject創建派生自定義類型

實施例:

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 

回答

1

AFAIK這並不以純PowerShell中工作(無去一些長度至少),但是它應該有可能與this

+0

有趣的,好奇他們是如何實現DSL的。 – Alex

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