Powershell Call Base Class 来自覆盖函数的函数
Powershell Call Base Class Function From Overidden Function
我想从父函数的覆盖函数调用它,我在下面的代码中隔离了我的问题:
class SomeClass{
[type]GetType(){
write-host 'hooked'
return $BaseClass.GetType() # how do i call the BaseClass GetType function??
}
}
SomeClass::new().GetType()
我期待这样的输出:
hooked
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True SomeClass System.Object
您可以通过将 $this
转换为它的 base class、[object]
:
来完成这项工作
class SomeClass {
[type]GetType(){
write-host 'hooked'
# Casting to [object] calls the original .GetType() method.
return ([object] $this).GetType()
}
}
[SomeClass]::new().GetType()
顺便提一下 在 PowerShell custom classes:
中引用基数 class
PowerShell 只允许您在 constructors 中使用抽象标识符 - base
引用基础 class,即调用时base-class 构造函数:
class Foo { [int] $Num; Foo([int] $Num) { $this.Num = $Num } }
class FooSub : Foo { FooSub() : base(42) { } } # Note the `: base(...)` part
[FooSub]::new().Num # -> 42
在方法 bodies 中,引用基数 class 的唯一方法 (non-reflection-based) 是使用 type literal,这实际上要求您 hard-code base-class 名称(也如上面的 ([object] $this)
所示):
class Foo { [string] Method() { return 'hi' } }
# Note the need to name the base class explicitly, as [Foo].
class FooSub : Foo { [string] Method() { return ([Foo] $this).Method() + '!' } }
[FooSub]::new().Method() # -> 'hi!'
我想从父函数的覆盖函数调用它,我在下面的代码中隔离了我的问题:
class SomeClass{
[type]GetType(){
write-host 'hooked'
return $BaseClass.GetType() # how do i call the BaseClass GetType function??
}
}
SomeClass::new().GetType()
我期待这样的输出:
hooked
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True SomeClass System.Object
您可以通过将 $this
转换为它的 base class、[object]
:
class SomeClass {
[type]GetType(){
write-host 'hooked'
# Casting to [object] calls the original .GetType() method.
return ([object] $this).GetType()
}
}
[SomeClass]::new().GetType()
顺便提一下 在 PowerShell custom classes:
中引用基数 classPowerShell 只允许您在 constructors 中使用抽象标识符 -
base
引用基础 class,即调用时base-class 构造函数:class Foo { [int] $Num; Foo([int] $Num) { $this.Num = $Num } } class FooSub : Foo { FooSub() : base(42) { } } # Note the `: base(...)` part [FooSub]::new().Num # -> 42
在方法 bodies 中,引用基数 class 的唯一方法 (non-reflection-based) 是使用 type literal,这实际上要求您 hard-code base-class 名称(也如上面的
([object] $this)
所示):class Foo { [string] Method() { return 'hi' } } # Note the need to name the base class explicitly, as [Foo]. class FooSub : Foo { [string] Method() { return ([Foo] $this).Method() + '!' } } [FooSub]::new().Method() # -> 'hi!'