摘要:C# 物件導向知識整理
這邊整理,我所看到的物件導向知識或文章
1.何謂物件
以下專貼至: yehyeh Notepad 這個網站寫得很好,也很清楚
封裝(Encapsulation)
- 抽象:對一件事物只瞭解其外在,而不需瞭解其內部構造或實作方法
- 抽象化(Abstraction):類別的內部成員可以封裝起來,讓別人不知道其如何實作,只能透過它提供的公開類別成員來進行操作
-
封裝的觀念和抽象化類似,但多了安全的概念,使用者只能使用公開的屬性或方法
- 不可以直接存取類別私有的屬性或方法
- 要存取類別私有的屬性或方法,需透過類別公開的方法,而設計師可在這些公開的方法中先做安全性檢查
-
例如一台電視,只要能看就好,使用者不需知道其構造和原理,只能透過電視的面板或搖控器來進行操作
如果電視沒有封裝,使用者看電視時會許就得自己把電線找出來接在一起 ⇒ 操作複雜且不安全-
範例:
class 電視 { private void 播放() { XXXXXX } public void 電源() { 播放(); } public void 選台() { 播放(); } } class 使用者 { 電視 tv = new 電視(); tv.電源(); }
-
範例:
繼承(Inheritance)
-
類別可以繼承另一個類別的屬性和方法
- 例如要畫一張和原有的設計圖很像的新設計圖時,可以用本來的設計圖為基礎開始畫
-
C#中使用 : 來代表繼承,後面接要繼承那個類別
- 格式:class 子類別 : 父類別 { ... }
- 子類別可以繼承父類別的能力,直接使用父類別非私有的屬性和方法
- 子類別只能繼承一個父類別
- 父類別的方法若宣告為虛擬(virtual),則表示該方法可以被子類別覆寫(非必需)
- 父類別的方法若宣告為抽象(abstract),則表示該子類別一定要覆寫該方法(子類別為抽象類別除外)
- 類別若包含抽象成員,則該類別必需宣告為抽象類別
- 父類別又叫做基底類別(Base Class)
-
子類別又叫做衍生類別(Derived Class)
-
範例:
class 父類別 { 類別A 屬性1; 類別B 屬性2; public void 方法1( ) { } virtual void 方法2( ) { } } class 子類別 : 父類別 { 類別C 屬性3; public override void 方法2( ){ } public void 方法3( ){ } }
-
範例:
-
若類別宣告為密封(sealed),則不可以被繼承(即不可為其它類別的父類別)
-
範例:
class 父類別 {} sealed class 子類別 : 父類別 {} //子類別不可被繼承
-
範例:
- 若方法或屬性宣告為密封(sealed),則不可以被子類別覆寫
多型(Polymorphism)
- 多型也叫同名異式,即使用一個方法名稱,在不同的條件下可以執行不同的動作
-
多載(Overloading):多個方法擁有相同名稱,不同參數,傳入不同參數時,會執行對應的方法
-
範例:
class 類別 { public void 多載方法( ) { } public void 多載方法(int a ) { } public void 多載方法(int a, int b ) { } }
-
範例:
-
覆寫(Overriding):子類別重新定義父類別的同名同參數方法
-
範例:
class 父類別 { virtual void 覆寫方法( ) { } } class 子類別 : 父類別 { public override void 覆寫方法( ){ } }
-
範例: