.NET XML疑问 XmlElement是XmlNode的子类,为什么XmlNode(父类)可以转换成XmlElement(子类)
展开全部
我去IDE里看了看,果然如楼主所说的
XmlNode是XmlElement的父类,试了几次转型,不论是用as还是用强制转都可以成功。
但有一种例外,当XmlNode中包含的是文本节点,也就是XmlText的时候,就不能转到XmlElement.
换句话说,子类父类间转型没有编译期间的强制,关键要看引用的真实类型。
其中Node是节点的意思,它是所有节点的抽象类,元素、文本都是节点(其他的我也说不上来),如果XmlNode里装的恰好是XmlElement的节点,那么转换就成功,否则就失败。
这与父类是否可以直接转换子类的逻辑没有太大关系。
在监视窗口中,右边的类型,除了显示当前类型外,还用一对大括号显示了真实类型。楼主可以多试试。
XmlNode是XmlElement的父类,试了几次转型,不论是用as还是用强制转都可以成功。
但有一种例外,当XmlNode中包含的是文本节点,也就是XmlText的时候,就不能转到XmlElement.
换句话说,子类父类间转型没有编译期间的强制,关键要看引用的真实类型。
其中Node是节点的意思,它是所有节点的抽象类,元素、文本都是节点(其他的我也说不上来),如果XmlNode里装的恰好是XmlElement的节点,那么转换就成功,否则就失败。
这与父类是否可以直接转换子类的逻辑没有太大关系。
在监视窗口中,右边的类型,除了显示当前类型外,还用一对大括号显示了真实类型。楼主可以多试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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.
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中取出来不会报错,他们不是转换,所以说不上父类->子类。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询