Powershell 对象 : referencing Self

标签 powershell object self

我可以创建一个具有四个这样的属性的对象

$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/

相关文章:

java - java中的简单对象示例

javascript - 获取数据并将标题添加到 Json 对象

javascript - 如何在 JSON 中查找键的值

go - 如何在Go执行期间使程序覆盖自身

html - 无法在 PowerShell 中触发单击事件

string - Powershell TrimEnd() 中的字符串操作问题

python - 为什么我不能将可选参数默认为成员变量?

IOS分配的对象在这个执行路径后面没有被引用保留计数+1

python - 运行一个从 PowerShell 显式获取参数的 Python 函数(不单独传递参数)

powershell - 检查变量/属性是单个值还是对象/数组