我需要將類作爲子類轉換。爲什麼,因爲我有很多代碼似乎通過interop做到這一點。我想刪除互操作並不更新任何代碼。爲了替換通過interop使用MSXML的代碼,我想編寫一個「本機」代碼/類集,它只是在封面下使用XmlDocument,並且具有100%的API規範(用於我們正在使用的),因此我可以刪除interop dll並在本土100%。 (當然,我想我支付的參考資金,但應該低於互操作成本,我可以做內存調試更容易,因爲它都在託管堆,對不對?).net,鑄造類作爲子類
看着MSXML6 interop,看來你可以投一個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返回(基類)IXMLDOMNode並將其轉換爲(子類)IXMLDOMElement。
這是一些掛羊頭賣狗肉,我需要弄清楚,因爲它的接口互操作水平,我不能在本土模仿的能力/使用,或sneakiness?
最接近實際運行代碼的是使用IConvertible和Convert.ChangeType,但這需要更改語法/代碼,這是我想避免的。
感謝DarkSquirrel42,這是瘋狂的,我認爲一個方法將返回一個IXMLDOMNode類型,但它返回的實例實際上是實施「子接口」 IXMLDOMElement對象實例。 但我想這只是說,「我有一個方法,至少會返回一個ICar,但我很可能會返回一個IRaceCar」。 謝謝先生! – GeoLord
再次感謝,現在一切都好。而要回答你的問題,「它實現IXMLDOMElement」,那是一點很難知道,因爲它是系統.__ ComObject,但使用VB的TypeName函數我的確可以看到它真正的「IXMLDOMElement」。 – GeoLord