class Program
{
static void Main(string[] args)
{
BaseClass c1 = new BaseClass();
MyClass c2 = new MyClass();
c1 = c2;
c1.Fun1();
Console.ReadKey();
}
} class BaseClass
{
public void Fun1()
{
Console.WriteLine("BaseClass");
}
} class MyClass : BaseClass
{
public new void Fun1()
{
Console.WriteLine("MyClass");
}
}为什么c1 = c2后,c1.Fun1()会调用基类中的方法?
c1 是BaseClass 类型,当然调用BaseClass的方法
运行时设断点,看看c1是什么吧
BaseClass c1 = new BaseClass();
MyClass c2 = new MyClass();
c1 = c2;
c1 = c2;不同类型,你能这么写,只是因为C#的规定“子类可以代替父类出现”。c1类型并没改变
不管c1 = c2这句有木有,
结果都一样,
想调用MyClass的Fun1()方法就用:
((MyClass)c1).Fun1();
这也从侧面说明 c1的类型是BaseClass。类型定义后就固定不能改了,这也是C#公理
((MyClass)c1).Fun1();//这样就行什么类型对应什么方法
{
static void Main(string[] args)
{
BaseClass c1 = new BaseClass();
MyClass c2 = new MyClass();
c1 = c2;
c1.Fun1();
Console.ReadKey();
}
} class BaseClass
{
public virtual void Fun1()
{
Console.WriteLine("BaseClass");
}
} class MyClass : BaseClass
{
public override void Fun1()
{
Console.WriteLine("MyClass");
}
}
那么c1里面的方法要写成 virtual虚方法,然后 子类override重写这个方法