syn*_*-dj 5 class powershell-5.0
显然,Powershell Classes 不支持自定义 getter 和 setter 方法。
当检查从 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" }
Run Code Online (Sandbox Code Playgroud)
TypeName: myClass
Name MemberType Definition
---- ---------- ----------
get_Property Method int get_Property()
set_Property Method void set_Property(int )
Property Property int Property {get;set;}
Run Code Online (Sandbox Code Playgroud)
如果 getter/setter 方法对于使用运算符访问属性至关重要,=就像由and运算符.Equals([object])调用的方法一样,我们应该能够重载默认的 getter/setter 方法并看到它简单地工作:-eq-ne
class myClass {
[int]$Property
hidden [void]set_Property([int]$Property) {
$this.Property=$Property * 10
}
[boolean]Equals([object]$Element) {
Return $true
}
}
Run Code Online (Sandbox Code Playgroud)
然而,=接线员绝对不会打电话$leftObject.set_Property($right):
$myObject = [myClass]::new()
$myObject.Property = 3
$myObject.Property
Run Code Online (Sandbox Code Playgroud)
3
Run Code Online (Sandbox Code Playgroud)
与此同时,我们看到这-eq确实在召唤([myClass]$left).Equals($right):
$myObject -eq "anything"
Run Code Online (Sandbox Code Playgroud)
True
Run Code Online (Sandbox Code Playgroud)
那么,看看 Powershell 类实现的机制,如果操作符不使用属性的 getter/setter,为什么=要将它们构建为隐藏方法呢?隐式创建 getter/setter 方法是否有任何技术原因,或者只是一些方便或约定,没有任何类型的运算符绑定?
| 归档时间: |
|
| 查看次数: |
349 次 |
| 最近记录: |