[C#, CSharp, C Sharp 教學 教程 教材 Tutorial] 物件導向三大特性(Object Oriented Characteristic)
YehYeh\'s Notepad yehyeh@gmail.com 

[C#, CSharp] 物件導向三大特性

封裝(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 覆寫方法( ){  }
      }
      
    多形
Δ 回到最上方