【发布时间】:2016-08-20 15:35:07
【问题描述】:
我需要$this 在静态类中工作!如何做到这一点?任何解决方法?我在类上下文中分析了Get-PSCallStack 的返回值,发现没有任何用处。
我需要它来 (a) 记录和 (b) 调用同一类的其他静态方法,而无需一次又一次地提及其名称。
示例代码(PowerShell v5):
class foo {
static [void]DoSomething() {
[foo]::DoAnything() #works
#$this.DoAnything #not working
$static_this = [foo]
$static_this::DoAnything() #works
}
static [void]DoAnything() {
echo "Done"
}
}
[foo]::DoSomething()
【问题讨论】:
-
错字:不可用
-
这在技术上是这个问题的副本:stackoverflow.com/questions/2113069/…。在 C# 中执行您所要求的(对于静态方法)与在 PowerShell 中一样混乱。
-
@Chris Dent:
[System.Reflection.MethodBase]::GetCurrentMethod().DeclaringType似乎不起作用。GetCurrentMethod()结果的属性表明该方法是动态的。无论如何,在 C# 中,您可以从 DoSomething 调用 DoAnything,而无需完整引用static void DoSomething() { DoAnything(); }。正是我在 PowerShell 中缺少的。 -
公平点,但我怀疑你会得到比
[foo]::DoAnything()更简洁的方法,因为单标签语句首先作为函数调用执行。那以及唯一可用于获取类型的明显方法 (GetCurrentMethod()) 不包含类型。引用 PS 类上的字段时也存在同样的问题(必须使用 $this 变量)。
标签: powershell reflection