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

一般来讲:子类--->父类OK父类-->子类NG... 一般来讲:
子类--->父类 OK
父类-->子类 NG
展开
 我来答
百度网友ce9f999
2013-06-17 · TA获得超过406个赞
知道小有建树答主
回答量:540
采纳率:100%
帮助的人:547万
展开全部

先贴出来节点关系图

任意子类可以转换为父类

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

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

myrealword
2013-06-16 · TA获得超过306个赞
知道小有建树答主
回答量:227
采纳率:100%
帮助的人:170万
展开全部
我去IDE里看了看,果然如楼主所说的

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

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

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

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

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

在监视窗口中,右边的类型,除了显示当前类型外,还用一对大括号显示了真实类型。楼主可以多试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Miles999
2013-06-16 · TA获得超过598个赞
知道小有建树答主
回答量:490
采纳率:0%
帮助的人:216万
展开全部
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.
追问
感谢wushang923的帮助,我的问题是
作为父子类关系,为什么
Element可以转换成Node
Node也可以转换成Element
追答
XmlElement派生自XmlNode,XmlElement是特殊的XmlNode类,他是XmlNode的一部分,所以XmlNode可以转XmlElement。
XmlNode表示一个节点,包括XmlElement(元素)和XmlAttribute(属性)。所以把XmlElement从XmlNode中取出来不会报错,他们不是转换,所以说不上父类->子类。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
流留天使心
2019-05-02
知道答主
回答量:1
采纳率:0%
帮助的人:750
展开全部
哈哈哈哈哈哈哈哈哈哈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式