//基类中的虚方法到底有什么作用?
//C#中指出:普通的方法重载:指的是类中两个以上的方法(包括隐藏的,继承而来的方法)取的名字相同,只要使用的参数类型或者参数个数不同,编译器便
//知道在何种情况下应该调用哪个方法。
//而在派生类中重新定义此虚方法时要求的是:方法名称、返回值类型、参数表中的参数个数、类型、顺序都必须与基类中的虚方法完全一致。
//简单一点说就是子类中override的方法能够覆盖基类中的virtual方法,当你把一个子类的实例转换为基类时,调用该方法时还是调用的子类的override的方
//法。
//一个类里面两个名字一样的方法叫“重载”,基类和继承类里面名字一样的方法叫“重写”,重写就必须使用虚方法。
//只有基类的方法加上关键字virtual后才可以被派生类override,从而实现面向对象最重要的特征--多态性,即基类可以使用派生类的方法
//父类中的方法重载,提供了某行为的不同实现方法(传入不同的参数);
//在子类中对父类相应方法的重载,可以这样理解(实际编译过程不是这样),子类完全copy父类代码后,把重载(override)的那部分代码挖去并用子类新的
//代码填上。
//如果子类没有重载(没有使用voerride关键字)而有和父类完全一样的方法,可以这样理解,子类没有挖去代码,只是简单覆盖,当要使用集成
//来的代码时,只需要类型转换就可以把覆盖代码浮现出来。
//如果不想让虚方法进行重写,可以用关键字(sealed)进行保护
//示例:public override sealed void Write();//sealed只能用在重写方法上
//下面的代码举例说明
class a
{
public virtual void VirtualMothed()
{
Console.WriteLine("这是a类中的一个虚方法");
}
public void NoVirtualMothed()
{
Console.WriteLine("这是a类中的一个非虚方法");
}
}
class b:a
{
public override void VirtualMothed()
{
Console.WriteLine("这是b类中重写的一个虚方法");
}
public new void NoVirtualMothed()//非虚方法就不是重写了,需要定义一个new来告诉编译器我新定义了一个方法。
{
Console.WriteLine("这是b类中的一个非虚方法");
}
}
class Program
{
static void Main(string[] args)
{
//虚方法:若一个实例方法声明中含有virtual这个修饰符,则称该方法为虚方法,否则就是非虚方法。
a a = new a();//实例化类a
a.VirtualMothed();//输出结果:这是a类中的一个虚方法
a.NoVirtualMothed();//输出结果:这是a类中的一个非虚方法
b b = new b();
b.VirtualMothed();//输出结果:这是b类中重写的一个虚方法
b.NoVirtualMothed();//输出结果:这是b类中的一个非虚方法
a = b;//将b赋值给a
a.VirtualMothed();//输出结果:这是b类中重写的一个虚方法
a.NoVirtualMothed();//输出结果:这是a类中的一个非虚方法
Console.ReadKey();
}
}
站内文章:均为188bet博彩体育app下载方式
各部门原创内容如需转载请著名本文网站链接://www.mcissock.com/new/27387.html未经允许转载要受法律责任,如需转载请联系269247937@qq.com
本文链接://www.mcissock.com/new/27387.html
tags:
郑州网站建设郑州网站制作郑州网站设计郑州建站公司郑州网站优化郑州做网站郑州小程序开发郑州网络公司