11.可以使用抽象函數重寫基類中的虛函數嗎?
答:
可以
需使用 new 修飾符顯式聲明,表示隱藏了基類中該函數的實現
或增加 override 修飾符,表示抽象重寫了基類中該函數的實現
示例:
class BaseClass
{
public virtual void F()
{
Console.WriteLine("BaseClass.F");
}
}
abstract class DeriveClass1 : BaseClass
{
public abstract new void F();
}
//感謝watson hua(http://huazhihao.cnblogs.com/)的指點
//是他提醒了我還可以用這種方法抽象重寫基類的虛方法
abstract class DeriveClass2 : BaseClass
{
public abstract override void F();
}
12.密封類可以有虛函數嗎?
答:
可以,基類中的虛函數將隱式的轉化為非虛函數,但密封類本身不能再增加新的虛函數
示例:
class BaseClass
{
public virtual void F()
{
Console.WriteLine("BaseClass.F");
}
}
sealed class DeriveClass : BaseClass
{
//基類中的虛函數F被隱式的轉化為非虛函數
//密封類中不能再聲明新的虛函數G
//public virtual void G()
//{
// Console.WriteLine("DeriveClass.G");
//}
}