是否可以在单独的文件中声明两个相互依赖的类?

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

我有两个相互依赖的 PowerShell 类:

班级

A

class A {

   [int] hidden $i
   [B]   hidden $b_

   A([int] $i) {
     $this.i = $i
   }

   [void] set_b([B] $b) {
      $this.b_ = $b
   }

   [B] get_b() {
      return $this.b_
   }

   [int] get_i() {
      return $this.i
   }
}

和班级

B
:

class B {

   [int] hidden $j
   [A]   hidden $a_

   B([int] $j) {
     $this.j = $j
   }


   [void] set_a([A] $a) {
      $this.a_ = $a
   }

   [A] get_a() {
      return $this.a_
   }

   [int] get_j() {
      return $this.j
   }
}

如果我将两个类放入同一个源文件中,

A-and-B.ps1
,并对文件进行点源:

. .\A-and-B.ps`

我能够使用这些课程:

[A] $a = new-object A 42
[B] $b = new-object B 99

$b.set_a($a)
$a.set_b($b)

$a.get_b().get_a().get_i()

但是,我想将每个类放入自己的文件中:

A.ps1
B.ps1
。不幸的是,我无法点源
A.ps1
,因为我收到
Unable to find type [B].
错误消息(我理解)。

所以我尝试在

B
中转发声明类
A.ps1
:

class B {}

class A {
   ...

允许对两个文件进行点源,

A.ps1
B.ps1

但是,尝试使用这些类会导致错误消息

无法将参数“b”转换为值:“B”,将“set_b”转换为类型“B”:“无法将类型“B”的“B”值转换为类型“B”。”

那么,有没有办法在 PowerShell 中将相互依赖的类放入它们自己的源文件中?

powershell class dependencies code-organization
1个回答
0
投票

您想创建 ps 模块来实现此目的。类似的讨论是here你会找到我猜的答案。

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