问一个类型转换的简单问题,高手请进

zhangxi24 2005-10-25 04:18:22
using System;
class A
{
public void F() { Console.WriteLine("A.F"); }
public virtual void G() { Console.WriteLine("A.G"); }
}
class B: A
{
new public void F() { Console.WriteLine("B.F"); }
public override void G() { Console.WriteLine("B.G"); }
}
class Test
{
static void Main() {
B b = new B();
A a=new A();
b=(B)a; //此句会发生“指定的转换无效”的错误,请问高手为什么?
}
}
...全文
99 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxufewbt 2005-10-25
  • 打赏
  • 举报
回复
男人一定是人,但人不一定就是男人。
shan1119 2005-10-25
  • 打赏
  • 举报
回复
派生类对象可以转换成基类对象,但反过来就不行
同意
CoolGaming 2005-10-25
  • 打赏
  • 举报
回复
派生类对象可以转换成基类对象,但反过来就不行
liuzhisheng 2005-10-25
  • 打赏
  • 举报
回复
因为你定义的变量a和b都属于A类型,对于a来讲,它不知道B是什么东西,但B却知道A是谁,所以不能把a转换成B,但是反过来是对的,即a=(A)b;另外,想要在自定义类型之间进行转换,必须用到两个关键字explicit(显式转换)implicit(隐式转换)。
jxufewbt 2005-10-25
  • 打赏
  • 举报
回复
b=(B)a; 换成
a=(A)b;
就可以

因为B继承了A,所以如果是B类型的,就一定是A类型,反之不成立。
du9232 2005-10-25
  • 打赏
  • 举报
回复
同意楼上
zhy0101 2005-10-25
  • 打赏
  • 举报
回复
a是A类型的,不能转换成B,B可以转换成A

110,534

社区成员

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

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

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