来自这个有用的问题/答案:PowerShell 中的构造函数链 - 调用同一类中的其他构造函数。
为了与调用构造函数的方式保持一致(例如
[car]::new()
),并且因为“the hidden
关键字”无论如何都不会完全隐藏该方法,我正在考虑使用方法名称 new()
(而不是init()
对于我的类中的构造函数“helper”方法,例如:
hidden new([string]$make) { $this.new($make, $null) }
它看起来工作正常,但不知怎的,我担心这样做可能会出现问题。
有什么理由我应该避免使用 PowerShell 类方法的名称“
new
”?
我有什么理由应该避免使用 PowerShell 类方法的名称
吗?new
从严格的技术考虑,抛开个人喜好/意见,只要该方法是实例方法,那么使用
new
作为其名称应该没有问题。
正如评论中所指出的,如果该方法是static,则会出现问题,因为你会与
new
内在成员发生冲突。
第一个问题是需要使用反射来调用
.ctor
中的方法:
class Test {
[string] $MyParam
Test() {
[Test].GetMethod('new').Invoke($null, $this)
}
Test([string] $myParam) {
$this.MyParam = $myParam
}
hidden static new([Test] $instance) {
$instance.MyParam = 'default value'
}
}
[Test]::new()
# MyParam
# -------
# default value
[Test]::new('other value')
# MyParam
# -------
# other value
第二个问题是重载定义会变得混乱,因为它们将显示您的方法而不是实际的构造函数:
[Test]::new
# OverloadDefinitions
# -------------------
# public static void new(Test instance);
这里的预期是(与您正在做的定义相同
[Test].GetConstructors()
):
[Test]::new
# OverloadDefinitions
# -------------------
# public Test();
# public Test(string myParam);