今天下午我试图找出一个解决方案,但到目前为止我只取得了部分成功......
这是我的代码:
class Animal {
[int] $numOfLegs = 0;
[int] $numOfEyes = 2;
[scriptblock] $dog = {
class Dog {
[int] $numOfLegs = 4
[int] getLegs(){ return $this.numOfLegs; }
[int] getEyes(){ return $numOfEyes; }
}
return [dog]::new()
}
}
(Dog 类可以通过这样做来实例化):
$mypetdog = & ([animal]::new().Dog)
基本上,我的想法是尝试让脚本块充当闭包,以便可以调用包含在 Animal 中的每个“子类”定义(并且仍然可以访问它的父范围)。因此,例如,当在 Dog 对象上执行 getEyes() 时,理论上它会返回数字 2。但是这不起作用,因为我认为脚本块无法看到它自己的范围之外(当在类中定义时)。
所以当我这样做时:
$mypetdog.getLegs()
它正确返回 4,但是当我这样做时:
$mypetdog.getEyes()
Powershell 不知道变量 $numOfEyes 是什么,随后由于该变量在类中未定义而引发错误。
有没有人在不使用 add-type 的情况下在 PowerShell 中模拟子类的解决方案?