新手在學寫程式時一定常常看到物件、類別、介面、抽象、繼承...奇怪的外星語,可能知道跟物件導向有關但又常常搞不清楚,畢竟程式就是一行一行執行下來,寫起來很直覺,也很好懂,但多了這些東西程式感覺就變得很複雜,想搞懂卻看文章看到頭暈腦脹。沒關係!這篇花一點點的時間說明,希望能對新手的學習有幫助。
首先,我們寫程式大部分都是寫在Class裡面,也就是類別,那類別跟物件有什麼關係?
物件(Object)就是類別(Class)的實體,類別(Class)就是物件(Object)的定義
聽不懂對吧?翻成白話文你或許就可以懂了
當你寫完的類別沒有被執行起來時,他只是一個文字檔,但當你的程式Build完要Run起來時,電腦會分配一些RAM的空間來執行你的程式,而當程式執行到你寫的類別時,他會去分配一些RAM的空間來給這個類別,這就是實體化,所以沒實體化以前,類別只是一些定義了物件實體化後要有哪些特徵的文字而已。以駭客任務(The Matrix)這電影來說,當你寫了一個Gun類別,再把母體的世界當成一個RAM裡面的空間,你就可以透過實體化這類別而得到一把槍(或是很多把槍),因此反抗軍再送救援物資給Neo時,其實只是把救援物資的類別丟到母體的執行緒裡面實體化而已。
這題面試常常考,以前不懂時都是硬背答案,但我覺得現在懂了或許該用我自己的理解分享給新手,讓新手在面試時不要再用硬背答案的方式了
public double HeartBeat { get; private set; }
上方的心跳速率這個屬性是公開(public)的,大家都能取值(get方法),但要設定這值等於多少並不開放給外部(private set方法),其中要決定心跳速率要有多快可能是一個private的方法來決定,因此可能還會需要一斷類似這樣的Code
private void SetHeartBeatValue()
{
//TODO:運算心跳的邏輯
HeartBeat = 60;
}
public class Car
{
public int Speed { get; set; }
public virtual void AddSpeed()
{
Speed += 1;
}
public virtual void TurnLeft()
{
//TODO:左轉的邏輯
}
public virtual void TurnRight()
{
//TODO:右轉的邏輯
}
}
public class Tesla : Car
{
}
其中子類別特斯拉繼承了Car類別,因此他不用再寫加速、左轉、右轉的方法,別的地方實體化Tesla時,就會有這些方法能用了,例如
var tesla = new Tesla();
tesla.AddSpeed();
tesla.TurnLeft();
tesla.TurnRight();
而子類別繼承了父類別的特性要修改的話也能做到,例如我希望另一個類別法拉利的加速要快一點,我可以這樣
public class Ferrari : Car
{
public override void AddSpeed()
{
base.Speed += 3;
}
}
關於C#的修飾詞,例如上面出現的public、private、virtual、override等等,本篇就不介紹了,請新手去看看其他鐵人賽有介紹C#的文章吧。
下一篇繼續介紹沒講完的多型~