Gre*_*r y 0 methods powershell properties class powershell-5.0
PS版本:5.1.17134.858
我还没有对 Powershell 的类进行大量工作,但这里有一个简单的示例来说明我遇到的情况:
class xNode{
[uint64]$MyID=0
static [uint64]$ClassID=0
xNode(){
$MyID = [xNode]::ClassID++
}
[String] ToString(){return "xNode: $MyID"}
}
Run Code Online (Sandbox Code Playgroud)
不解析它会给出两个错误:
第 6 行 $MyID...,“无法分配属性,使用 '$this.MyID'。”
第 9 行 ..$MyID", "方法中未分配变量。"
我正在尝试使用名为 的类属性$MyID,并且这种用法似乎与帮助文档中给出的示例一致get-help about_Classes,当我将最后的整个示例复制到文件中然后尝试运行它时,我得到了$Head, $Body, ,...也有同样的错误$Title,当然我可以通过添加来强制它工作this.
class xNode{
[uint64]$MyID=0
static [uint64]$ClassID=0
xNode(){
$this.MyID = [xNode]::ClassID++
}
[String] ToString(){return "xNode: $($this.MyID)"}
}
Run Code Online (Sandbox Code Playgroud)
然而,我不想继续到处打字this.,是否有一些环境设置或我忽略的东西?
(注意:为了让它在命令行上工作,我还需要删除所有空白行)
不过我不想继续输入这个。到处都是,是否有一些环境设置或我忽略的东西?
不,它的工作方式如广告所示,如果没有变量引用,您无法引用类内的实例属性$this。
为什么 powershell 类属性在其方法中需要这个?
(以下是我所说的“合格推测”,即不是官方来源的解释)
从实现者的角度来看, PowerShell 类有点棘手,因为 .NET 属性的行为与 powershell 脚本块中的参数或常规变量不同。
这意味着当语言引擎解析、分析和编译构成 PowerShell 类的代码时,必须特别注意哪些规则和约束适用于其中任何一个。
通过要求所有“实例管道”都经过路由$this,观察类成员的一组规则与其他所有规则的问题在范围上变得小得多,并且现有的编辑器工具可以继续(在某种程度上)工作而只需很少的改变。
从用户的角度来看,require$this还有助于防止意外事故,例如在创建新的局部变量时覆盖实例成员。