問題描述:
    抽象類 :至少有一個抽象方法的類
    虛擬類 : 至少有一個方法是Virtual的類   現在想問的是:所有方法都是抽象方法的抽象類 與所有方法都是Virtual,且都沒有做任何實現的虛擬類 有沒有區別?如果有區別,區別何在?
    
注:不要僅僅告訴我,一個可以實例化,一個不可以實例化喲

解决方案 »

  1.   

    如果你以前学过C++的话,很容易区分Abstract和Virtual,那么简单的说,Abstract和Virtual是细分原先C++中的Virtual。
    Abstract声明纯虚类和纯虚函数(没有函数体),因此它是不能被实例化的;而Virtual是申明虚函数,但是必须要有函数体。具体如下:
    Abstract不光可以修饰类的方法,还可以修饰类的成员和类自身;而且Abstract起到的作用只是声明,并不分配空间,而实现是由后续继承类来做的,因而对Abstract所修饰的类是不能实例化的,因为通过它进行访问每个成员。而Virtual只能修饰类的方法,起到的作用不光是声明,还分配了函数指针,指向所定义的函数体。
      

  2.   

    virtual的方法必须提供实现,这是abstract语法存在的意义……
      

  3.   

    Knight94(愚翁) ( ) 信誉:110  2006-03-27 12:25:00  得分: 0  
     
     
       如果你以前学过C++的话,很容易区分Abstract和Virtual,那么简单的说,Abstract和Virtual是细分原先C++中的Virtual。
    Abstract声明纯虚类和纯虚函数(没有函数体),因此它是不能被实例化的;而Virtual是申明虚函数,但是必须要有函数体。具体如下:
    Abstract不光可以修饰类的方法,还可以修饰类的成员和类自身;而且Abstract起到的作用只是声明,并不分配空间,而实现是由后续继承类来做的,因而对Abstract所修饰的类是不能实例化的,因为通过它进行访问每个成员。而Virtual只能修饰类的方法,起到的作用不光是声明,还分配了函数指针,指向所定义的函数体。  
     
    听君一席话胜读十年书阿
      

  4.   

    abstract
    abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示类只能是其他类的基类。抽象类具有以下特性:
    ·抽象类不能实例化。
    ·抽象类可以包含抽象方法和抽象访问器。
    ·不能用 sealed 修饰符修改抽象类,这意味着该类不能被继承。
    ·从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。
    ·在方法或属性声明中使用 abstract 修饰符以指示此方法或属性不包含实现。抽象方法具有以下特性:
    ·抽象方法是隐式的 virtual 方法。
    ·只允许在抽象类中使用抽象方法声明。
    ·因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如: public abstract void MyMethod();
    ·实现由 overriding 方法提供,它是非抽象类的成员。
    ·在抽象方法声明中使用 static 或 virtual 修饰符是错误的。除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。
    ·在静态属性上使用 abstract 修饰符是错误的。
    ·在派生类中,通过包括使用 override 修饰符的属性声明可以重写抽象的继承属性。virtual
    virtual 关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。默认情况下,方法是非虚拟的。不能重写非虚方法。不能将 virtual 修饰符与以下修饰符一起使用:
    static   abstract   override除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。
    ·在静态属性上使用 virtual 修饰符是错误的。
    ·通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性。
      

  5.   

    Abstract 与 interface 在某种意义上是是相同的
    无论你继承了Abstract 或interface ,在子类中都必须实现所有方法
    而 Virtual 定义的方法就可以不重写
    在定义上两个都不同了,而且abstract 的方法必须在abstract 的类里面:
    protected virtual void aa()
    {
    }
    protected abstract void aa();
      

  6.   

    C++中,抽象类就是有纯虚函数的类
    带VIRTUAL的类就是支持多态的函数,跟类又没关系