为什么Powershell类属性在其方法中需要此属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Powershell类属性在其方法中需要此属性?相关的知识,希望对你有一定的参考价值。

PSVersion:5.1.17134.858

我尚未对Powershell的类做很多工作,但这是我遇到的一个简单示例:

class xNode{
   [uint64]$MyID=0
   static [uint64]$ClassID=0

   xNode(){
      $MyID = [xNode]::ClassID++
   }

   [String] ToString(){return "xNode: $MyID"}
}

不解析会产生两个错误:第6行$ MyID ...,“无法分配属性,请使用'$ this.MyID'。”第9行.. $ MyID“,”未在方法中分配变量。“

我正在尝试使用名为$MyID的classes属性,这种用法似乎与帮助文档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)"}
}

但是,我宁愿不必在所有位置继续输入this.,也许是某些环境设置还是我忽略了的某些东西?

((注意:要使其在命令行中正常工作,我还需要删除所有空白行)

答案

但是,我宁愿不必继续键入此内容。在整个地方,是否可能有一些环境设置或我忽略的东西?

不,它的工作方式如所宣传,没有$this变量引用,您不能在类内部引用实例属性。

为什么powershell类属性在其方法中需要此?

(以下是我所说的“合格的推测”,即不是正式来源的解释)

从实现者的角度来看,

PowerShell类有点tricky,因为.NET属性的行为不同于Powershell脚本块或常规变量中的参数。

这意味着当语言引擎解析,分析和编译组成PowerShell类的代码时,必须格外小心适用于哪一个规则和约束。

[通过要求所有“实例管道”都通过$this进行路由,这种针对类成员和其他所有成员遵守一组规则的问题在范围上变得越来越小,并且现有的编辑器工具可以继续(某种)工作几乎没有变化。

以上是关于为什么Powershell类属性在其方法中需要此属性?的主要内容,如果未能解决你的问题,请参考以下文章

24.编写一个Car类,具有String类型的属性品牌,具有功能drive; 定义其子类Aodi和Benchi,具有属性:价格型号;具有功能:变速; 定义主类E,在其main方法中分别创建Aodi和(

PowerShell成员:方法和属性的解释?

this关键字

Java:原始匿名类在其方法中丢失了泛型类型

Win8.1启动Windows powershell的两种方法怎么办

30.编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象ab,使用对象a(