2015年10月1日 星期四

小山的 C# 教學-第31課-Override

本課簡介

如果你不想使用繼承到的行為該怎麼辦?
改寫掉就好囉!
本課介紹如何讓繼承的 class 覆寫掉 base class 的 method

教學影片

注意:影片有高畫質 720P 的選項,可以看得更清楚喔!



重點提示

1. Override 指的是「改寫、覆寫」,主要是用來讓繼承的 class 改寫掉從 base class 繼承到的行為。

2. 想要使用 Override,首先必須要先在繼承的 class 中定義一個名稱與參數皆相同的method,然後在原本的 method 前加上「virtual」關鍵字,而新的 method 前加上「override」關鍵字。

補充

Override 使用時機

基本上在撰寫物件導向的程式時,為了要讓許多物件有相同的動作,通常會寫一個 class 包含該動作,並讓其他 class 繼承它。就像是這次課程中介紹的 move 或 attack。可是偏偏會有一些狀況會需要讓某些物件的行為與預設的不同,而當你需要這種修改時,就會用到 override。

另外,Override 也常用於多型性中,主要是因為它可以讓許多具有相同 method 的物件具有不同行為,這部分會在之後的課程中提及。

練習

有一間書店,最近在進行大清倉。除了百科全書類的書之外,只要是書類幾乎都賣 200 元 (百科全書類 500 元)。請你幫書店老闆撰寫一個計算書類價格的系統。

該系統必須符合下列條件:

1. 有一個叫做 Book (書) 的 class,其中包含一個 public property,和一個 public method。該 property 的名稱為 BookName (書名)。method 則為「ShowPrice (顯示價格)」,會傳會一個 string,內容是書名與價格。例如:「寫扣的藝術 200 元」。

2. 有另一個 class 叫做 Encyclopedia (百科全書),繼承自 Book。它包含一個 method,也叫做「ShowPrice (顯示價格)」。這個 method 必須 override Book 的 ShowPrice,並且顯示的價格要是 500 元。

寫好之後可以自行建立一個 Form,加上一個按鈕,在按鈕的行為中用下面這段程式碼測試。
Book a = new Book(); Book b = new Encyclopedia(); a.BookName = "寫扣的藝術"; b.BookName = "大英百科全書"; MessageBox.Show(a.showPrice()); MessageBox.Show(b.showPrice()); 執行後應該出現兩個 MessageBox,分別顯示:

「寫扣的藝術 200 元」與「大英百科全書 500 元」

相關資訊連結

MSDN - 官方對於 Override 的說明

https://msdn.microsoft.com/zh-tw/library/ebca9ah3.aspx

7 則留言:

  1. 想請問小山有遇過使用f5會執行錯誤,但ctrl+f5卻可以執行的情況嗎?

    回覆刪除
  2. 終次又可以看到小山 大大的教學囉

    回覆刪除
  3. 小山老師, 謝謝你沒忘記我們~~~ v_v

    回覆刪除
  4. 小山老師,感謝你的大恩大德,請持續教教鄉民們吧!!

    回覆刪除
  5. 我目前为止最喜欢的programming教学,请坚持下去哦!:)

    回覆刪除
  6. 太棒啦~~~淺顯易懂 跟某些書生硬的講法不一樣~

    回覆刪除