Class 为什么';t重载get\u/set\u函数是否按预期工作?

Class 为什么';t重载get\u/set\u函数是否按预期工作?,class,powershell-5.0,Class,Powershell 5.0,显然,自定义getter和setter方法 当检查从Powershell v5类生成的Powershell对象实例时,我们看到为该类定义[type]属性将在对象实例中创建隐藏的[type]get_属性()和[void]set_属性([type])方法: class myClass { [int]$Property } [myClass]::new() | Get-Member -Force | Where-Object { $_.Name -like "*Property" } 如

显然,自定义getter和setter方法

当检查从Powershell v5类生成的Powershell对象实例时,我们看到为该类定义
[type]属性将在对象实例中创建隐藏的
[type]get_属性()
[void]set_属性([type])
方法:

class myClass {
    [int]$Property
}

[myClass]::new() | Get-Member -Force | Where-Object { $_.Name -like "*Property" }

如果getter/setter方法对于使用
=
操作符访问属性至关重要,比如
.Equals([object])
方法由
-eq
-ne
操作符调用,那么我们应该能够重载默认的getter/setter方法,并看到它简单地工作:

但是,
=
操作符肯定没有调用
$leftObject.set\u属性($right)


同时,我们看到
-eq
确实在调用
([myClass]$left)。Equals($right)



那么,看看Powershell类实现的机制,如果
=
操作符没有使用属性的getter/setter,为什么要将它们构建为隐藏方法呢?getter/setter方法是隐式创建的,有什么技术原因吗?或者只是一些没有任何类型的运算符绑定的方便或约定吗?

真的在寻找声明类时重载get\u&set\u方法的文档吗。希望有人来回答这个问题!我很想了解为什么它也会这样。即使强制将
ScriptMethod
添加到与隐藏的getter或setter具有相同签名的实例化对象中“成功”,但当您调用类方法绑定到的属性时,仍然会调用该类方法。即使理解忽略显式重载属性的getter或setter的开发人员代码背后的决定也是令人困惑的。
   TypeName: myClass

Name         MemberType Definition             
----         ---------- ----------             
get_Property Method     int get_Property()     
set_Property Method     void set_Property(int )
Property     Property   int Property {get;set;}
class myClass {
    [int]$Property

    hidden [void]set_Property([int]$Property) {
        $this.Property=$Property * 10
    }

    [boolean]Equals([object]$Element) {
        Return $true
    }
}
$myObject = [myClass]::new()
$myObject.Property = 3
$myObject.Property
3
$myObject -eq "anything"
True