我可以创建一个具有四个这样的属性的对象
$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 最终都提供了更多关于对象属性的信息,除了简单的示例之外,没有任何关于方法的信息,这些示例回显了一些文本以证明您在方法中。
因此,非常感谢任何建议,即使只是“那棵树上没什么”
谢谢!
最佳答案
PowerShell 和 C# 非常相似。 C# 使用 this
引用当前实例/本身,而 PowerShell 使用 $this
$This
In a script block that defines a script property or script method, the $This variable refers to the object that is being extended.
来源:about_Automatic_Variables
样本:
$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
关于Powershell 对象 : referencing Self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28516606/