(求助)不能把基类的地址指向派生类吗?写了段代码研究多态性,但总是报错,帮忙看看。

huangwenqiang2 2010-09-16 01:41:39
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ceshixuni
{
class Program
{
static void Main(string[] args)
{
jilei t = new jilei();
t.showmsg();
paisheng p = new paisheng();
p.showmsg();
p = t;
p.showmsg();
}
}

public class jilei
{
public int x;
public int y;
public virtual void showmsg()
{
Console.WriteLine("现在调用的是基类的显示函数");

}
}

public class paisheng :jilei
{
public override void showmsg()
{
Console.WriteLine("这里调用的是派生类的显示函数");
}
}
}

这段代码怎么看也没找到问题啊,但是系统总是报错说t无法转换到p。

报错显示如下:
------ Build started: Project: ceshixuni, Configuration: Debug x86 ------
E:\silverlight学习\test\ceshixuni\ceshixuni\Program.cs(16,17): error CS0266: Cannot implicitly convert type 'ceshixuni.jilei' to 'ceshixuni.paisheng'. An explicit conversion exists (are you missing a cast?)

Compile complete -- 1 errors, 0 warnings
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

大家帮忙看看是什么原因啊
...全文
94 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangwenqiang2 2010-09-16
  • 打赏
  • 举报
回复
明白了,感谢大家!
Lemon2050 2010-09-16
  • 打赏
  • 举报
回复
同意2楼的观点。只能将基类更加具体化,而不能让派生类更加抽象化。
jilei t = new jilei();
t.showmsg();
paisheng p = new paisheng();
p.showmsg();
//p = t; //不能通过编译
//paisheng q = new jilei(); //不能通过编译
jilei q = new paisheng();
q.showmsg();
t = p;
t.showmsg();

程序执行结果:
现在调用的是基类的显示函数
这里调用的是派生类的显示函数
这里调用的是派生类的显示函数
这里调用的是派生类的显示函数
hckings 2010-09-16
  • 打赏
  • 举报
回复
jilei t = new jilei();
t.showmsg();
paisheng p = new paisheng();
p.showmsg();
p = t;
p.showmsg();


jilei p = new paisheng();
p.showmsg();
viena 2010-09-16
  • 打赏
  • 举报
回复
这样赋值是可以的 t = p;,因为p是t是真命题,
而p = t;显然不可以,因为t是p是假命题~
viena 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]
你定义一个中国对象,可以转换类型,说中国是一个国家。这样转换大家认可的。反过来你定义一个国家对象,想说国家就是中国。这样能转么?
[/Quote]
支持wuyazhe

拜托楼主思维有点逻辑性好不好呢~
特别 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]
你定义一个中国对象,可以转换类型,说中国是一个国家。这样转换大家认可的。反过来你定义一个国家对象,想说国家就是中国。这样能转么?
[/Quote]
楼主用反了
兔子-顾问 2010-09-16
  • 打赏
  • 举报
回复
你定义一个中国对象,可以转换类型,说中国是一个国家。这样转换大家认可的。反过来你定义一个国家对象,想说国家就是中国。这样能转么?

110,533

社区成员

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

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

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