C#中的虚函数

1. 虚函数的特点

 虚函数是面向对象语言中多态性的重要实现. 当一个函数方法在声明时, 前面带了virtual关键字, 这个函数就是一个虚函数. 它与非虚函数的主要区别在于它的实现可以在派生类中进行重写(override)(非强制要求). 重写后的函数一样也是虚函数, 当一个类或其基类中存在虚函数后就不允许出现同名, 返回值, 参数类型个数相同的非虚函数.

 虚函数由于可以被子类改写的特点, 不允许设为私有(private), 同时也不能和static, override, abstract等一起使用.除了函数方法外, C#中还可以用virtual修饰属性, 索引器, 事件等等.

2. 虚函数的执行过程

 当调用一个对象的一个函数时, 系统会首先去检查该对象的声明类中这个函数是不是虚函数, 如果不是虚函数就直接执行函数. 如果是虚函数的话再去检查这个对象的实例类, 看看实例类中有没有重写这个虚函数, 如果有的话就直接执行该函数, 否则就去找这个实例类的父类, 看看他的父类中有没有重写这个虚函数,有的话就执行, 没有的话就继续找直到找遍所有父类, 如果没有override关键字, 最后会执行申明类里的虚函数.

代码来了!

public class GoodClass
    {
        public virtual void GoodFunc()
        {
            Console.WriteLine("This is a good function!!!");
        }
    }

    public class NiceClass : GoodClass
    {
        public override void GoodFunc()
        {
            Console.WriteLine("This is a nice function");
        }
    }
    public class start
    {
        public void main()
        {
            GoodClass gc = new GoodClass();
            gc.GoodFunc();
            GoodClass nc = new NiceClass();
            nc.GoodFunc();
        }
    }
This is a good function!!!
This is a nice function
public class GoodClass
    {
        public virtual void GoodFunc()
        {
            Console.WriteLine("This is a good function!!!");
        }
    }

    public class NiceClass : GoodClass
    {
        public override void GoodFunc()
        {
            Console.WriteLine("This is a nice function");
        }
    }
    
    public class GreatClass : NiceClass{}
    public class start
    {
        public void main()
        {
            GoodClass gc = new GreatClass();
            gc.GoodFunc();
        }
    }
    This is a nice function
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值