基类和派生类的转换问题

sarcophile 2009-03-28 11:57:08
// 从TreeNode派生的类
[Serializable]
public class SNodeBase : System.Windows.Forms.TreeNode
{
public Guid ID = Guid.Empty;
public SNodeBase() : base() { }
public SNodeBase(string text) : base(text) { }
}


//从前一个类又派生出第二个类
[Serializable]
public class SNode : SNodeBase
{
public string content = "";
public SNode()
{
}
}

// 测试:
SNodeBase node;
SNode n;
node = (SNodeBase)treeView.Nodes[0];// Node[0]的类型是TreeNode。从基类转换成派生类,可以正常转换
n = (SNode)node; //这一句同样是从基类转换成派生类,但运行时出现异常,不能转换,为什么????
...全文
160 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jishengzu 2009-03-28
  • 打赏
  • 举报
回复
SNodeBase node;
SNode n;
node = (SNodeBase)treeView.Nodes[0];// Node[0]的类型是TreeNode。从基类转换成派生类,可以正常转换
我试了一下上面那句就报错了。
n = (SNode)node; //这一句同样是从基类转换成派生类,但运行时出现异常,不能转换,为什么????
jishengzu 2009-03-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jishengzu 的回复:]
lib目录下貌似是说明 不过全是英文的
[/Quote]
发错了晕
jishengzu 2009-03-28
  • 打赏
  • 举报
回复
lib目录下貌似是说明 不过全是英文的
sarcophile 2009-03-28
  • 打赏
  • 举报
回复
我记得在C++里面是可以 通过指向基类的指针来引用派生类, 而且这是多态性的主要体现, 在C#里面怎么实现?
sarcophile 2009-03-28
  • 打赏
  • 举报
回复
基类如何转换成派生类?
sarcophile 2009-03-28
  • 打赏
  • 举报
回复
晕,我也发现了,倒数第二句也会错,但是也不是每次都错。。。这是个以前用过的程序片段
vrhero 2009-03-28
  • 打赏
  • 举报
回复
基类是不能直接强制转换为派生类的...

node = (SNodeBase)treeView.Nodes[0];// Node[0]的类型是TreeNode。从基类转换成派生类,可以正常转换
-------------------
这一句不是“从基类转换成派生类”...这里的TreeNodeCollection在Add时添加的一定是SNodeBase实例...从SNodeBase到SNodeBase当然正常...

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧