请问大家,在一个抽象类中,
一个抽象的方法和一个虚拟的方法什么区别?比如:
public abstract class NXml
{ public abstract void ToXml();
  public abstract void tXml();
  public  virtual void tXml()
{

} }

解决方案 »

  1.   

    虚拟方法在子类中可以不一定OVERRIDE,而抽象方法必须要在继承其的子类中实现.就是你不实现,也要在子类中写上该抽象函数,楼上两位已经解释的很清楚了。
      

  2.   

    上边的方法编译不过,我知道,因为我用了tXml作比较。。不知道大家用过viso没有,在viso的类图对于虚拟的方法,在实现的类中也一定要实现,要不然就有错误。。很奇怪了
      

  3.   

    在方法或属性声明中使用 abstract 修饰符以指示此方法或属性不包含实现。抽象方法具有以下特性: 抽象方法是隐式的 virtual 方法。 
    只允许在抽象类中使用抽象方法声明。 
    因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如: 
    public abstract void MyMethod();
    实现由 overriding 方法提供,它是非抽象类的成员。 
    在抽象方法声明中使用 static 或 virtual 修饰符是错误的。
    virtual 关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。
    我觉得主要区别是在父类中前者不写实现而在子类中OVERRIDE,后者可以写实现也可被OVERRIDE。