[C#基础知识]关于虚函数Virtual 及 抽象函数Abstract

13 篇文章 0 订阅


Virtual

虚函数是多态的前提和保证

  被标注为virtual的函数可以被继承类重写(override),并且可以在运行时动态调用相应的方法(多态)。

  没有标注为virtual的非虚方法,在继承类中虽然不能通过override重写方法,但是也可以声明一个同名方法的,不过不具备多态的性质!



有两个类如下:

    public class SuperClass
    {
        public void Display()//not virtual
        {
            Console.WriteLine("I'm super");
        }

        public virtual void Vdisplay()
        {
            Console.WriteLine("I'm superVVV!!!");
        }
    }

    public class LowerClass : SuperClass
    {
        public void Display()//new public void Display();和父类中的方法同名,却不具备多态的性质
        {
            Console.WriteLine("i'm lower");
        }
        public override void Vdisplay()//重写了父类中的方法
        {
            Console.WriteLine("I'm lowerVVV");
        }
    }

主函数及输出如下:

        static void Main(string[] args)
        {
            //这里一切正常
            LowerClass l = new LowerClass();
            l.Display(); //输出:I'm lower
            l.Vdisplay();//输出:I'm lowerVVV

            //问题在下面:
            SuperClass s = new LowerClass();
            s.Display(); //输出:I'm super (!!!注意:此处并没有多态的影子,而是直接调用了父类SuperClass的Display()方法)
            s.Vdisplay();//输出:I'm lowerVVV
        }


Abstract

abstract抽象方法则更像是一个接口(Interface)方法

被标注为abstract的方法不能有具体的实现!

而且如果有方法被标注为abstract, 则这个类需要被标注为abstract


具体关于virtual 和 abstract的区别可以参看:http://www.cnblogs.com/MayGarden/archive/2010/04/04/1704279.html


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值