子类继承父类后调用virtual函数问题(base.函数名)
void Main()
{?
SonB s = new SonB();
? ? ? ? ? ? s.Show();//先調用子類的函數,再調用基類的函數(在子類方法中base.Show()),一共messageBox.show(...)了兩次
}
//**************
public class SonB : BaseA
? ? {
? ? ? ? public string b = "bb";
? ? ? ? public override void Show()
? ? ? ? {
? ? ? ? ? ? MessageBox.Show(b);
? ? ? ? ? ? base.Show();
? ? ? ? }
? ? }
? ?public class BaseA
? ?{
? ? ? ?public string a = "aa";
? ? ? ?public virtual void Show()
? ? ? ?{
? ? ? ? ? ?MessageBox.Show(a);
? ? ? ?}
? ?}
//******************
?protected override void WndProc(ref Message m)//子類的消息循環
? ? ? ? {
? ? ? ? ? ? if (m.Msg == WM_SYSCOMMAND)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (m.WParam.ToInt32() == SC_CLOSE)//不影響關閉操作,因為后面還調用了基類的消息循環( ?base.WndProc(ref m);//基類的消息循環)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ............................
? ? ? ? ? ? ? ? ? ? //return;//返回的話就不調用基類的消息循環了,這樣就不能執行基類的基本消息對應的行為了
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? //根據繼承關系,子類重寫的函數調用完后,可以手動再調用基類的被重寫的函數;
? ? ? ? ? ? base.WndProc(ref m);//基類的消息循環
? ? ? ? }
總結
以上是生活随笔為你收集整理的子类继承父类后调用virtual函数问题(base.函数名)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c# 中重载WndProc,实现重写“最
- 下一篇: 使用函数指针实现父类函数调用子类函数的两