【发布时间】:2020-09-19 21:47:29
【问题描述】:
我有一个类,该类有属性,但我只想能够在内部设置它们的值,但允许对其进行公共 get 访问器。由于在 C# 中这样的类中没有 PS 等效项:
public string PropertyName {
get;
private set;
}
我已经研究过在我的类上实现以下解决方法,以便“私有”成员通过属性的公共访问器保持隐藏:
class MyClass {
hidden [string]$_PropertyName
MyClass( $propertyValue ) {
$this._PropertyName = $PropertyValue
$this | Add-Member -ScriptProperty -Name 'PropertyName' -Value {
return $this.$_PropertyName
} -SecondValue {
throw "Cannot write value to a readonly property"
}
}
}
这很好用,可以做我想做的事,但是这个类也有几个静态属性,我想从它的静态构造函数中做同样的事情。虽然上面的代码确实适用于设置类类型本身的属性(用[MyClass] 替换$this),但有一个小怪癖使访问“只读”属性的语法不一致正常访问静态成员:
hidden static [string]$_StaticProperty = 'someValue'
static MyClass() {
[MyClass] | Add-Member -ScriptProperty StaticProperty -Value {
return [MyClass]::$_StaticProperty
}
}
我可以访问StaticProperty,但只能作为实例成员:
[MyClass]::StaticProperty # ==> $null
[MyClass].StaticProperty # ==> someValue
有没有办法使用 Add-Member 将 static 成员添加到类型中,这样我就可以保持访问器语法一致?
【问题讨论】:
标签: powershell