PowerShell模块类继承问题:导入后无法识别基类[A]
PowerShell模块类可见性问题的解决方法
PowerShell模块中定义的类默认仅对模块内部可见,若要在外部脚本中直接引用,必须显式导出。你的场景中,模块classes.psm1未导出类A,导致外部脚本虽能通过继承B间接使用A的基础逻辑,但无法直接声明[A]类型或调用A::new();若将类C移入模块却不导出,外部同样无法识别C。
方法一:外部脚本保留类C,修改模块导出A和B
修改classes.psm1,在文件末尾添加类导出语句,显式对外暴露A和B:
class A { A([string] s) { } } class B : A { B([string] s) : base($s) } # 显式导出类A和B Export-ModuleMember -Type Class -Name A, B
外部脚本无需修改,using module classes.psm1导入后即可正常识别A、B,类C的定义和实例化都能正常执行。
方法二:将类C移入模块并导出所有类
把类C的定义移到classes.psm1中,同时导出A、B、C三个类,确保外部脚本能访问所有需要的类型:
class A { A([string] s) { } } class B : A { B([string] s) : base($s) } class C : B { [A] $p C([string] s) : base($s) { $this.p = A::new($s) } } # 显式导出所有需要外部访问的类 Export-ModuleMember -Type Class -Name A, B, C
外部脚本通过using module classes.psm1导入后,就能直接使用类C。
注意事项
using module语句必须放在脚本的最顶部,不能有任何可执行代码、注释以外的内容在它之前,否则会导致类加载失败。- 若模块路径不在PowerShell的模块搜索路径中,
using module需要指定完整的文件路径,例如using module .\classes.psm1。
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

