我可以用这样的四个属性创建一个对象
$pocketKnife = New-Object PSObject -property @{
Color = 'Black'
Weight = '55'
Manufacturer = 'Buck'
Blades = '1'
}
并且基本上按预期工作。但是,我似乎无法理解如何添加引用对象自己的属性的方法。我可以添加这个
$pocketKnife | Add-Member ScriptMethod GetColor {
Write-Host "Color = $($pocketKnife.Color)"
}
然后我可以调用$ pocketKnife.GetColor()并按预期工作。但是我必须将对象引用硬连接到方法中,并且实际上我引用了在对象本身之外定义的对象变量。我想做的是
$pocketKnife | Add-Member ScriptMethod GetColor {
Write-Host "Color = $($Self.Color)"
}
最终我想创建一个Logger对象,它将初始化自身并在属性中建立适当的日志文件名,并且具有一个带有字符串参数的Log方法,并且在调用它时会记录到属性中的日志文件。我觉得这可能不仅仅是PowerShell真正打算面向对象。就像我应该将我的(自定义)对象的概念限制为结构的数据,而不是类和实例? FWIW,我对OOP足够新,我不知道我不知道什么。我所知道的是,现在我正在使用全局变量作为日志文件路径,以及引用它的init和log函数,我正在寻找消除全局变量的最佳方法,并且还使用PS来实现它的潜力,并在我学习时学习一些编程概念。而且我的所有Google Fu最终都会获得有关对象属性的更多信息,而不仅仅是简单示例之外的方法,它们会回显一些文本以证明您在方法中。 所以,任何建议都非常感谢,即使它只是“不是那棵树”
谢谢!
答案 0 :(得分:10)
PowerShell和C#非常相似。 C#使用this
引用当前实例/本身,而PowerShell使用$this
$这
在定义脚本属性或脚本方法的脚本块中, $此变量引用正在扩展的对象。
样品:
$pocketKnife2 = New-Object PSObject -property @{
Color = 'Black'
Weight = '55'
Manufacturer = 'Buck'
Blades = '1'
}
$pocketKnife2 | Add-Member ScriptMethod GetColor {
Write-Host "Color = $($this.Color)"
}
$pocketKnife2.GetColor()
Color = Black
$pocketKnife2.Color = 'Red'
$pocketKnife2.GetColor()
Color = Red