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