.NET XML疑问 XmlElement是XmlNode的子类,为什么XmlNode(父类)可以转换成XmlElement(子类)

一般来讲:子类--->父类 OK父类-->子类 NG
2025-02-27 01:18:09
推荐回答(4个)
回答1:

先贴出来节点关系图

任意子类可以转换为父类

父类不一定可以转换成子类,这里的转化为什么可以,这个取决于xmlnode这个对象本身的节点类型。理解这句话,就发现一点都不奇怪。

一个节点它本身就是Element类型,你只是用Xmlnode来接收赋值,这里已经存在了一个隐式装箱的过程了,然后你再将他转换为它本来的类型,这当然是可以的啦。有什么好疑问的吗?

回答2:

我去IDE里看了看,果然如楼主所说的

XmlNode是XmlElement的父类,试了几次转型,不论是用as还是用强制转都可以成功。

但有一种例外,当XmlNode中包含的是文本节点,也就是XmlText的时候,就不能转到XmlElement.

换句话说,子类父类间转型没有编译期间的强制,关键要看引用的真实类型。

其中Node是节点的意思,它是所有节点的抽象类,元素、文本都是节点(其他的我也说不上来),如果XmlNode里装的恰好是XmlElement的节点,那么转换就成功,否则就失败。

这与父类是否可以直接转换子类的逻辑没有太大关系。

在监视窗口中,右边的类型,除了显示当前类型外,还用一对大括号显示了真实类型。楼主可以多试试。

回答3:

System.Xml.XmlNode
System.Xml.XmlLinkedNode
System.Xml.XmlElement

1、XmlElement是具现类,可以直接实例化,而XmlNode是抽象类,必须通过XmlDocument实例通过CreateNode创建。
2、XmlElement是特殊的XmlNode类,Xml节点有多种类型:属性节点、注释节点、文本节点、元素节点等。也就是XmlNode是这多种节点的统称。但是XmlElement专门指的就是元素节点。
3、XmlElement是XmlNode的一部分,不是互换。如果用XmlNode换XmlElement是可以的,但是如果用XmlElement换XmlNode可能会发生错误,因为XmlNode不止包含XmlElement.

回答4:

哈哈哈哈哈哈哈哈哈哈