gpt4 book ai didi

Powershell 类继承行为

转载 作者:行者123 更新时间:2023-12-02 23:09:00 27 4
gpt4 key购买 nike

我正在尝试利用 PowerShell 的继承来创建从现有类继承的类,但我没有看到基于 various 的预期行为sources .

这是一个突出问题的简短示例:

class child : System.Xml.XmlDocument {
[String] ToString(){
return 'ChildString'
}

[void] LoadXml([string]$content) {
Write-Host 'LoadXml'
([System.Xml.XmlDocument]$this).LoadXml($content)
}
}

如果我跑
Write-Host 'XMLDocument Object'
$xml=New-Object xml
$xml.ToString()

Write-Host 'Inherited Object'
$child=New-Object child
$child.ToString()

控制台输出是
XMLDocument Object
#document
Inherited Object
#document

表示 ToString()子类的方法没有被使用。

在频谱的另一端,如果我调用 $child.LoadXml('<a>Hello</a>')然后我得到无限递归,这意味着对父对象的调用在该方法中失败。

根据我能够找到的内容,我不希望这些方法以这种方式运行,我希望有人可以帮助我了解我所缺少的。我一般更习惯 Python;但是,出于安全原因,我无法用另一种编程语言实现此代码(我无法在要运行的计算机上安装软件)。

谢谢!

这是 $PSversionTable.PSVersion 的结果以供引用:
Major  Minor  Build  Revision
----- ----- ----- --------
5 1 15063 909

最佳答案

在这两种情况下,调用 ToString()被附加到它们共同祖先的附加类型数据覆盖 System.Xml.XmlNode :

PS C:\> Get-TypeData -TypeName System.Xml.XmlNode

TypeName Members
-------- -------
System.Xml.XmlNode {[ToString, System.Management.Automation.Runspaces.CodeMethodData]}

您可以使用 Remove-TypeData在运行时将其删除:
Remove-TypeData -TypeName System.Xml.XmlNode

您现在应该可以看到您的 child对象调用它自己的方法和 XmlDocument对象调用 ToString()继承自 System.Object :
XMLDocument Object
System.Xml.XmlDocument
Inherited Object
ChildString

关于Powershell 类继承行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49259408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com