如:
class Program
{
static void Main(string[] args)
{
oc oa=new ob();
oa.b(1, 2); //输出结果为fdfdf
}
public class oc
{
private int a;
//封装
public int geta
{
get { return a; }
}
public int seta
{
set { a = value; }
}
//函数b
public virtual int b(int c, int e)
{
Console.WriteLine("{0}+{1}={2}", c, e, c + e);
return c + e;
}
}
//派生类ob,基类oc
public class ob : oc
{
//重写基类中的函数b
public override int b(int c,int e)
{
Console.WriteLine("fdfdf");
return c;
}
}
}
三、覆盖
1、示意
覆盖指重新定义子类中与父类具有相同函数特征的的函数体。子类中有一函数和父类中函数的函数特征相同,但函数体不同,称为覆盖。这种覆盖又称为隐藏,是隐藏父类中相同的函数,并没有进行重写。
2、发生条件
在子类中写一个和基类一样名字(参数不同也算)的非虚函数,会让基类中的函数被隐藏,编译后会提示要求使用New关键字。
如:
class Program
{
static void Main(string[] args)
{
oc oa=new ob();
oa.b(1, 2); //输出结果为1+2=3
}
public class oc
{
private int a;
//封装
public int geta
{
get { return a; }
}
public int seta
{
set { a = value; }
}
//函数b
public int b(int c, int e)
{
Console.WriteLine("{0}+{1}={2}", c, e, c + e);
return c + e;
}
}
//派生类ob,基类oc
public class ob : oc
{
//覆盖,隐藏基类中的函数b
public new int b(int c,int e)
{
Console.WriteLine("fdfdf");
return c;
}
}
}










