.net,将 class 转换为子 class
.net, cast class as a subclass
我需要将 class 转换为子 class。为什么,因为我有很多代码 似乎 通过互操作来执行此操作。我想删除互操作而不更新任何代码。为了替换通过互操作使用 MSXML 的代码,我想写一个 "native" 的 code/classes 集,它只是在幕后使用 XmlDocument 并且具有 100% api 规范(对于我们正在使用的) 这样我就可以删除互操作 dll 并 100% 在本地。 (当然,我想我为引用付费,但这应该低于互操作成本,而且我可以更轻松地进行内存调试,因为它都在托管堆上,对吧?)
查看 MSXML6 互操作,您似乎可以将 IXMLDOMNode 转换为 IXMLDOMElement。但是 IXMLDOMElement 定义为:
public interface IXMLDOMElement : IXMLDOMNode
具体来说,我可以运行这段代码就好了:
Dim myXml As FreeThreadedDOMDocument60 = New FreeThreadedDOMDocument60()
myXml.loadXML("<root><a>1</a><a>2</a></root>")
Dim oExtPropWideNode As IXMLDOMElement = DirectCast(myXml.selectSingleNode("/root/a"), IXMLDOMElement)
Console.WriteLine(oExtPropWideNode.text)
为什么我可以运行这个? selectSingleNode returns (base class) IXMLDOMNode 并且它被转换为 (subclass) IXMLDOMElement。
这是我需要弄清楚的一些诡计吗,因为它是一个 ability/usage 接口,或者是我在本地无法模仿的互操作级别的偷偷摸摸?
我最接近实际 运行ning 的代码是使用 IConvertible 和 Convert.ChangeType,但这需要 syntax/code 更改,我想避免这样做。
IXMLDOMNode 和 IXMLDOMEElement 不是 classes,而是接口...在它们之间转换的能力取决于实现 IXMLDOMNode 的 class ...它是否实现 IXMLDOMElement?然后你可以投...
我需要将 class 转换为子 class。为什么,因为我有很多代码 似乎 通过互操作来执行此操作。我想删除互操作而不更新任何代码。为了替换通过互操作使用 MSXML 的代码,我想写一个 "native" 的 code/classes 集,它只是在幕后使用 XmlDocument 并且具有 100% api 规范(对于我们正在使用的) 这样我就可以删除互操作 dll 并 100% 在本地。 (当然,我想我为引用付费,但这应该低于互操作成本,而且我可以更轻松地进行内存调试,因为它都在托管堆上,对吧?)
查看 MSXML6 互操作,您似乎可以将 IXMLDOMNode 转换为 IXMLDOMElement。但是 IXMLDOMElement 定义为:
public interface IXMLDOMElement : IXMLDOMNode
具体来说,我可以运行这段代码就好了:
Dim myXml As FreeThreadedDOMDocument60 = New FreeThreadedDOMDocument60()
myXml.loadXML("<root><a>1</a><a>2</a></root>")
Dim oExtPropWideNode As IXMLDOMElement = DirectCast(myXml.selectSingleNode("/root/a"), IXMLDOMElement)
Console.WriteLine(oExtPropWideNode.text)
为什么我可以运行这个? selectSingleNode returns (base class) IXMLDOMNode 并且它被转换为 (subclass) IXMLDOMElement。
这是我需要弄清楚的一些诡计吗,因为它是一个 ability/usage 接口,或者是我在本地无法模仿的互操作级别的偷偷摸摸?
我最接近实际 运行ning 的代码是使用 IConvertible 和 Convert.ChangeType,但这需要 syntax/code 更改,我想避免这样做。
IXMLDOMNode 和 IXMLDOMEElement 不是 classes,而是接口...在它们之间转换的能力取决于实现 IXMLDOMNode 的 class ...它是否实现 IXMLDOMElement?然后你可以投...