显然,自定义getter和setter方法are not supported with Powershell Classes。
在检查从Powershell v5类构建的Powershell对象实例时,我们发现为该类定义[type]Property
会在对象实例中创建隐藏的[type]get_Property()
和[void]set_Property([type])
方法:
class myClass {
[int]$Property
}
[myClass]::new() | Get-Member -Force | Where-Object { $_.Name -like "*Property" }
TypeName: myClass
Name MemberType Definition
---- ---------- ----------
get_Property Method int get_Property()
set_Property Method void set_Property(int )
Property Property int Property {get;set;}
如果getter / setter方法对于使用=
运算符访问属性至关重要,.Equals([object])
和-eq
运算符会调用-ne
方法,我们应该能够重载默认的getter / setter方法并看到它简单地工作:
class myClass {
[int]$Property
hidden [void]set_Property([int]$Property) {
$this.Property=$Property * 10
}
[boolean]Equals([object]$Element) {
Return $true
}
}
然而,=
运算符肯定不会调用$leftObject.set_Property($right)
:
$myObject = [myClass]::new()
$myObject.Property = 3
$myObject.Property
3
与此同时,我们发现-eq
确实在调用([myClass]$left).Equals($right)
:
$myObject -eq "anything"
True
因此,查看Powershell类实现的机制, 为什么 具有属性'如果=
运算符没有使用它们,那么getter / setter是否构建为隐藏方法?有没有任何技术原因可以隐式创建getter / setter方法,或者只是一些方便或约定而没有任何类型的操作符绑定?