这篇博文是自己的学习稿,在这里做一下记录。也希望给许多遇到和我一样问题的同学提供一些帮助。
隐藏
代码例子:
using System;
class A
{
public void fun()
{
Console.WriteLine("A.fun");
}
}
class B :A
{
new public void fun()
{
Console.WriteLine("调用基类的fun方法");
base.fun();
}
}
class Program
{
static void Main(string[] args)
{
B b1 = new B();
Console.WriteLine("执行b1.fun");
b1.fun();
A a1=b1;
Console.WriteLine("执行a1.fun");
a1.fun();
Console.ReadKey();
}
}
输出内容:
执行b1.fun
调用基类的fun方法
A.fun
执行a1.fun
A.fun
结论:
请先注意a1.fun1()的执行结果,目前是原A类的fun1函数。那么,我将代码做修改,使用重写的方式。
代码粒子:
using System;
class A
{
public virtual void fun()
{
Console.WriteLine("A.fun");
}
}
class B :A
{
public override void fun()
{
Console.WriteLine("B.fun");
}
}
class Program
{
static void Main(string[] args)
{
B b1 = new B();
Console.WriteLine("执行b1.fun");
b1.fun();
A a1 = b1;
Console.WriteLine("执行a1.fun");
a1.fun();
Console.ReadKey();
}
}
输出内容:
执行b1.fun
B.fun
执行a1.fun
B.fun
结论
可以发现,同样是执行a1.fun。但两种方式的执行结果都不一样,这就是它非常明显的区别。在仅仅只是隐藏了方法时,作为类A依旧调用类A的fun函数,但作为重写时,调用的是B中重写的fun函数。