基类和派生类的转换问题

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; //这一句同样是从基类转换成派生类,但运行时出现异常,不能转换,为什么????
...全文
110 点赞 收藏 8
写回复
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当然正常...
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告