强制类性转换

kdymh 2008-04-17 09:09:11
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication3
{
public class BaseClass
{
public void DoWork() { Console.WriteLine("baseclass.speak"); }
public int WorkField;
public int WorkProperty
{
get { return 0; }
}
}

public class DerivedClass : BaseClass
{
public new void DoWork() { Console.WriteLine("derivedclass.speak"); }
public new int WorkField;
public new int WorkProperty
{
get { return 0; }
}
}
class Program
{
static void Main(string[] args)
{
DerivedClass B = new DerivedClass();
B.DoWork(); // Calls the new method.

BaseClass A =(BaseClass)B;
A.DoWork(); // Calls the old method.

}
}
}

如果
BaseClass A =(BaseClass)B;
不强制类转换,
而是
BaseClass A =B;
它也会调用基类方法,为什么???
...全文
91 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kdymh 2008-04-17
  • 打赏
  • 举报
回复
呵呵。。。小小点东西既然有这么多函意!!!!

谢谢大家明白了
viena 2008-04-17
  • 打赏
  • 举报
回复
DerivedClass is BaseClass
syeerzy 2008-04-17
  • 打赏
  • 举报
回复
子类转父类可以隐式转换.
cc_net 2008-04-17
  • 打赏
  • 举报
回复
BaseClass A =(BaseClass)B;
BaseClass A =B;

没区别把,子类转到父类是默认完成的。

不会调用父类的方法,new关键字是隐藏的父类方法,说明在子类中是新方法。对于用new隐藏的情况,用父类的引用,调用的是他自己的方法,而不是子类的。

除非父类为虚方法,子类重写虚方法,那么BaseClass A =B; 用A调用的就是子类的方法了,也就实现了多态
wudichong 2008-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dancingbit 的回复:]
new修饰的方法,没有多态,具体调用的方法只取决于调用的变量的类型。
[/Quote]
子类转父类,没必要强制类型转换
A是基类,他当然得调用基类的方法
dancingbit 2008-04-17
  • 打赏
  • 举报
回复
new修饰的方法,没有多态,具体调用的方法只取决于调用的变量的类型。
dancingbit 2008-04-17
  • 打赏
  • 举报
回复
派生类的实例转换为基类,不需要强制转换,效果是一样的。

110,538

社区成员

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

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

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