使用导入模块从单独的文件继承 PowerShell 类

问题描述 投票:0回答:2

我在这里做错了什么 - 或者 PowerShell v5 不支持单独的类文件和继承?

foo.ps1:

class foo
{
   [STRING] $test = 'Hello World';

   [STRING] PrintTest()
   {
      return $this.test;
   }
}

bar.ps1:

Import-Module "$PSScriptRoot\foo.ps1"

class bar : foo
{ }

控制台

PS C:\Script> Import-Module ./bar.ps1;

PS C:\Script> $myBar = New-Object bar;

PS C:\Script> $myBar.PrintTest();

Method invocation failed because [bar] does not contain a method named 'PrintTest'.

如果将 foo 和 bar 类放在同一个文件中,它就可以正常工作。然而,我正在构建的类相当大,我想将它们分开。

class powershell inheritance
2个回答
13
投票

首先,模块文件应该具有扩展名

.psm1
,因此您需要更改它。如果您不这样命名它们,我下面引用的
Using
语句将显示错误。

bar.psm1 应包含对模块的引用,因为模块不导入类

bar.psm1:

Using module ".\foo.psm1"

class bar : foo
{ }

但是,一旦执行此操作,bar 类就不会导出,因此您必须编写一个单独的 ps1 文件,该文件在顶部

Using module ".\bar.psm1"
指出,然后在该脚本文件中您可以调用 [bar] 类。


0
投票

目前(直到并包括 PowerShell 7),根据 PowerShell 团队的说法,这是目前不可能的:“出现完成逻辑和解析器错误是因为该语言不打算支持类的常用方式”。

© www.soinside.com 2019 - 2024. All rights reserved.