c#virtual Abstrct Override Extern NEW关键字的使用

本文详细介绍了C#中virtual关键字用于实现多态性的虚函数,包括其与一般函数的区别和使用场景。同时,讲解了abstract关键字在抽象类中声明抽象方法,以及override关键字在派生类中重写虚函数的用法。extern关键字则用于声明在外部实现的方法。文章还强调了override和new关键字在方法重写和隐藏中的作用,并简要提及了方法重载的概念。
摘要由CSDN通过智能技术生成

virtual(修饰方法成员,表示虚方法。父类可以含有该类的实现,子类可以覆写该函数。)

简单介绍虚函数virtual

在某基类中声明 virtual 并在一个或多个派生类中被重新定义的成员函数称为虚函数。

虚函数的作用就是实现多态性(Polymorphism),多态性是将接口与实现进行分离。

C#作为完全面向对象语言,所有函数并不默认为virtual,但可以在基类中声明关键字virtual,就可以在其派生类中通过关键字override重写该函数。重写后的virtual函数依旧是virtual函数。由于virtual只对类中的实例函数成员有意义,所以成员字段和静态函数都不能声明为virtual,也不能与override和abstract一起用。

虚函数与一般函数的区别

一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,也就是写死的!而虚函数在编译期间是不被静态编译的,它的相对地址是不确定的,它会根据运行时期对象实例来动态判断要调用的函数,其中声明时定义的类叫声明类,执行时实例化的类叫实例类。

使用虚函数virtual

1、当调用一个对象的函数时,系统会直接去检查这个对象声明定义的类,即声明类,看所调用的函数是否为虚函数。

2、如果不是虚函数,那么它就直接执行该函数。而如果有virtual关键字,也就是一个虚函数,那么这个时候它就不会立刻执行该函数了,而是转去检查对象的实例类。

3、在这个实例类里,他会检查这个实例类的定义中是否有重新实现该虚函数(通过override关键字),如果有,则马上执行该实例类中的这个重新实现的函数。而如果没有,系统会不停地往上找实例类的父类,并对父类重复刚才在实例类里的检查,直到找到第一个重载了该虚函数的父类为止,然后执行该父类里重载后的函数

 public class A
        {
   
            protected string _name = "";
            public A()//和下面A是重载关系
            {
                 
            }
            public A(string name)
            {
   
                this._name = name;
            }
            public void say()
            {
   
                Console.WriteLine(_name);
            }
      }
        public class B : A
        {
   
            public  B(string name):base(name)
           {
   

           }
           public void say()
           {
   
                Console.WriteLine(_name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值