我有两个相互依赖的 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 中将相互依赖的类放入它们自己的源文件中?
您想创建 ps 模块来实现此目的。类似的讨论是here你会找到我猜的答案。