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!'