虚方法virtual与抽象方法abstract的区别

虚方法virtual的意思是子类可以重写,抽象方法abstract是子类必须重写。

抽象方法   
   使用abstract关键字    public    abstract    bool    Withdraw(…);   
   抽象方法是必须被派生类覆写的方法。   
   抽象方法是可以看成是没有实现体的虚方法   
   如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法   
    
   虚方法   
   使用virtual关键字    public    virtual    bool    Withdraw(…);   
   调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。   
   虚方法可以有实现体

若一个实例方法的声明中含有        virtual        修饰符,则称该方法为虚拟方法;一个虚拟方法的实现可以由派生类取代。取代所继承的虚拟方法的实现的过程称为重写该方法;在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。         
            
       虚函数的限制:         
            
       1.虚函数仅适用于有继承关系的类对象,        所以只有类的成员函数才能说明为虚函数.             
       2.静态成员函数不能是虚函数.             
       3.内联函数不能是虚函数.             
       4构造函数不能是虚函数.             
       5.析构函数可以是虚函数.

简单点说,抽象方法是需要子类去实现的.虚方法,是已经实现了,子类可以去覆盖,也可以不覆盖取决于需求.   
   如   

   public    abstract    class    AUser   
   {   
           
public    abstract    UserInfo    getUser();   
           
public    virtual    void    Save(UserInfo    info)   
           {   
                   
//实现保存的功能   
           }   
   }   
    
   
public    class    UserSqlServer:AUser   
   {   
           
public    override    UserInfo    getUser()   
           {   
                     
//一定要实现的,抽象类只给了抽象方法   
           }   
           
//假设抽象类针对SqlServer实现的功能,这里不需要实现了.   
   }   
    
   
public    class    UserOracle:AUser   
   {   
           
public    override    UserInfo    getUser()   
           {   
                     
//一定要实现的,抽象类只给了抽象方法   
           }   
           
//假设抽象类针对Oracle实现的功能   
           public    override    void    Save(UserInfo    info)   
           {   
                     
//覆盖抽象类中的Save方法   
           }   
   }   

 url:http://greatverve.cnblogs.com/archive/2011/06/29/virtual-abstract.html

posted @ 2011-06-29 10:05  大气象  阅读(1110)  评论(3编辑  收藏  举报
http://www.tianqiweiqi.com