【C#】物件導向簡例

  • 20
  • 0
  • C#
  • 2020-06-09

物件導向基本概念

一、封裝:

降低程式的複雜度及維護上的困難度。​
情境:想看看如果把一大堆程式碼寫在同一塊,如果insert突然有問題,我要找在第8877行上。

所以為了讓數據更安全及讓程式碼保持穩定,把數據放在class裡面,可以用不公開屏蔽

用白話的意思比較像是 你有顆充電器,

充電器可以用來充電,但裡面的構造你不必知道!

二、繼承:

為了解決重複性的代碼所衍生。

上過生物課,應該都知道「界門綱目科屬種」,像是人,為哺乳類。

人有分為黃種人、白種人、黑人...等

所以以程式角度來看,白人 is a 人,黃種人 is a 人 ,黑人 is a 人,這就是繼承

用其他角度來看,手機也是。每支手機都叫手機,但有分"品牌"

像華為手機、小米手機、華碩手機、蘋果手機...等

手機都可以用來打電話,所以BasePhone為父類別,IPhone、小米就可以稱為子類別,繼承BasePhone

/// <summary>
/// 手機
/// </summary>
public class BasePhone
{ 
   /// <summary>
   ///  打電話
   /// </summary> 
   public void Call();
}

/// <summary>
/// 愛瘋手機
/// </summary>
public class IPhone:BasePhone
{  
}

/// <summary>
/// 華碩手機
/// </summary>
public class Asus:BasePhone
{  
}
BasePhone iphone = new IPhone();
iphone.Call();
BasePhone asus = new Asus();
asus.Call();

以上例子,蘋果手機類別、華碩手機皆繼承手機父類別,即可調用裡面的方法。

三、多型:

可以把他想成抽象,但他有很多種表現方式,和繼承特別有關係。

抽象類:父類別

例如:蘋果手機是 手機,Asus也是 手機,所以Apple、Asus繼承手機,

由此可知手機是基底類別 (Parent);Apple、Asus 為(Child)

Apple、Asus可以打電話,可以發簡訊,

系統是不一樣的,一個為IOS,一個為Android

所以打電話發簡訊放一塊(一樣),系統放一塊(不一樣)

那不一樣的部分就把它變成抽象方法要override他

public abstract class BasePhone
{
    // 一方面子類都得有 一方慢又各不相同
	public abstract void System();
    
    public void Call(){
    	Console.WriteLine("打電話");    
    }
    
    public void Send(){
    	Console.WriteLine("發簡訊");    
    }
}
public class IPhone: BasePhone{
	public override void System(){
        Console.WriteLine("系統為ios"); 
    };
}
public class Asus:BasePhone{
	public override void System(){
        Console.WriteLine("系統為android"); 
    };
}

另外一種簡單解釋:

老鷹和鴕鳥都是鳥,但老鷹會飛;鴕鳥不會;鴕鳥會跑:老鷹不會

他們都是鳥,繼承了鳥類的特徵行為,但是部分行為不同

行為不同可稱之為多型

多型 和 超載、覆寫相關

多載(OverLoad):

相同的模樣,擁有不同的行為

以坊間最喜歡提的方法多載為例

我們有同一種方法叫做Get,但參數有很多,這就是方法的多載

void Get();
void Get(int i);
void Get(char c);
void Get(String s, int i);
void Get(String s, String s2);

覆寫(OverRide):

覆寫(Overrideing)是在繼承關係中,子類別實作一個方法取代父類別,使該方法擁有不同於父類別的行為。

假設父親和兒子都有一個"賺錢"這個方法

兒子一定要繼承家業嗎?不一定

所以他可以透過其他方式賺錢,都是賺錢,只是不同的方式實踐。

 

以上是我自身對物件導向概念看法~

內容可能稍微薄弱。若有問題或謬論請告知一下!謝謝