以下是来自MSDN的一些代码:
// compile with: /target:library
public class D
{
public virtual void DoWork(int i)
{
// Original implementation.
}
}
public abstract class E : D
{
public abstract override void DoWork(int i);
}
public class F : E
{
public override void DoWork(int i)
{
// New implementation.
}
}
有人能就抽象方法和虚拟方法之间的区别来解释上面的代码吗?
抽象方法:
如果一个抽象方法定义在一个类中,那么该类应该
声明为抽象类。
抽象方法应该只包含方法定义,不应该
包含方法主体/实现。
派生类中必须重写抽象方法。
虚拟方法:
虚方法可以在派生类中重写,但不能重写
强制性的。
虚方法必须有方法体/实现
用定义。
例子:
public abstract class baseclass
{
public abstract decimal getarea(decimal Radius);
public virtual decimal interestpermonth(decimal amount)
{
return amount*12/100;
}
public virtual decimal totalamount(decimal Amount,decimal principleAmount)
{
return Amount + principleAmount;
}
}
public class derivedclass:baseclass
{
public override decimal getarea(decimal Radius)
{
return 2 * (22 / 7) * Radius;
}
public override decimal interestpermonth(decimal amount)
{
return amount * 14 / 100;
}
}
抽象方法:
如果一个抽象方法定义在一个类中,那么该类应该
声明为抽象类。
抽象方法应该只包含方法定义,不应该
包含方法主体/实现。
派生类中必须重写抽象方法。
虚拟方法:
虚方法可以在派生类中重写,但不能重写
强制性的。
虚方法必须有方法体/实现
用定义。
例子:
public abstract class baseclass
{
public abstract decimal getarea(decimal Radius);
public virtual decimal interestpermonth(decimal amount)
{
return amount*12/100;
}
public virtual decimal totalamount(decimal Amount,decimal principleAmount)
{
return Amount + principleAmount;
}
}
public class derivedclass:baseclass
{
public override decimal getarea(decimal Radius)
{
return 2 * (22 / 7) * Radius;
}
public override decimal interestpermonth(decimal amount)
{
return amount * 14 / 100;
}
}