提问 问题标签用户 C#多态中new 和(className)的区别

明天以后test 2014-01-07 09:31:57
class A
{
public virtual void test1()
{
cnosole.writeline("test1 in A");
}
}
class B
{
public override void test1()
{
cnosole.writeline("test1 in B");
}
}

main()
{
B b=new B();
A a1=new B();
A a2=(A)b;
}

请问各位大神A a1=new B()、和A a2=(A)b,有什么区别?
...全文
117 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 netfuzhimin 的回复:
[quote=引用 5 楼 wyd1520 的回复:] 那就是一样的了,你要是调同样的方法都是调用B类的那个test1 in B 因为他被overwrite了
就没有别的不同?只是语法上面的表达不同?[/quote] a1,a2使用起来一样的。 如果要扣细了的话,那你先new 一个B, 然后又 A a2= (A)b; 中间不是多了一步吗?而且多了一个变量b。 其他没什么。
明天以后test 2014-01-07
  • 打赏
  • 举报
回复
引用 5 楼 wyd1520 的回复:
那就是一样的了,你要是调同样的方法都是调用B类的那个test1 in B 因为他被overwrite了
就没有别的不同?只是语法上面的表达不同?
本拉灯 2014-01-07
  • 打赏
  • 举报
回复
那就是一样的了,你要是调同样的方法都是调用B类的那个test1 in B 因为他被overwrite了
明天以后test 2014-01-07
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
new是创建新实例,第二个是转换,这样a2和b是同一个东西,修改任何一个,都会影响到另一个
B是继承A的,我刚才编辑题目的时候写错了
明天以后test 2014-01-07
  • 打赏
  • 举报
回复
引用 2 楼 wyd1520 的回复:
没有继承关系,运行报错。
有继承关系,我刚才编写题目的时候写错了 应该是B:A
本拉灯 2014-01-07
  • 打赏
  • 举报
回复
没有继承关系,运行报错。
bdmh 2014-01-07
  • 打赏
  • 举报
回复
new是创建新实例,第二个是转换,这样a2和b是同一个东西,修改任何一个,都会影响到另一个

111,097

社区成员

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

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

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