Aug*_*ler 5 powershell properties class
如何使用Powershell类实现get/set属性.请看下面我的例子:
Class TestObject
{
[DateTime]$StartTimestamp = (Get-Date)
[DateTime]$EndTimestamp = (Get-Date).AddHours(2)
[TimeSpan] $TotalDuration {
get {
return ($this.EndTimestamp - $this.StartTimestamp)
}
}
hidden [string] $_name = 'Andreas'
[string] $Name {
get {
return $this._name
}
set {
$this._name = $value
}
}
}
New-Object TestObject
Run Code Online (Sandbox Code Playgroud)
你可以Add-Member ScriptProperty用来实现一种getter和setter:
class c {
hidden $_p = $($this | Add-Member ScriptProperty 'p' `
{
# get
"getter $($this._p)"
}`
{
# set
param ( $arg )
$this._p = "setter $arg"
}
)
}
Run Code Online (Sandbox Code Playgroud)
新建它会调用初始化程序,$_p为其添加scriptproperty p:
PS C:\> $c = [c]::new()
Run Code Online (Sandbox Code Playgroud)
使用属性p产生以下结果:
PS C:\>$c.p = 'arg value'
PS C:\>$c.p
getter setter arg value
Run Code Online (Sandbox Code Playgroud)
这种技术存在一些缺陷,这些缺陷主要与Add-Member线路的冗长和容易出错有关.为了避免这些陷阱,我实施Accessor了你可以在这里找到的.
使用Accessor而不是进行Add-Member大量的错误检查并将原始类实现简化为:
class c {
hidden $_p = $(Accessor $this {
get {
"getter $($this._p)"
}
set {
param ( $arg )
$this._p = "setter $arg"
}
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3984 次 |
| 最近记录: |