1. 前言
你應該已經聽過,類別 就是模板,而 物件 是它的實例。
但現在是時候更深入搞懂類別和物件啦!
想像你是汽車工廠的工程師。你不用每台車都自己手工組裝,而是先畫好一份藍圖——一份可以組出很多同款車的通用說明書。這份藍圖會寫清楚車子要有引擎、輪子、車身、顏色,還有它能做什麼事。
這份藍圖在程式世界裡就叫做 類別。
然後想像工廠照著這份藍圖生產了一批車。每一台都是實體、真的能上路、有自己的車牌、顏色,甚至還有一些個人化設定。但它們全都是照同一份藍圖組出來的。
這些實體車在程式世界裡就叫做 物件(或叫類別的實例)。
所以,記住:
- 類別 就像藍圖、模板、設計圖。它描述了某個東西可以有什麼資料(像是品牌、顏色、門數)和可以做什麼事(像是開車、煞車、按喇叭)。類別只是描述,不會佔很多記憶體,也不是什麼「活的」東西。
- 物件 就是照類別藍圖組出來的「車」。它是你程式裡真的「活著」的東西,會佔記憶體,有自己的資料(像是車牌、顏色),也能做類別裡寫的那些事。
聽起來有點抽象?別擔心,馬上就會搞懂。
2. 什麼是類別?
類別 是一種自訂資料型別,描述這種型別的物件應該長怎樣:有什麼特徵(狀態/屬性/欄位),還有可以做什麼動作(行為/方法/函式)。
類別會定義:
- 欄位(變數) — 存在物件裡的資料。
- 方法(函式) — 物件可以做的動作。
- 屬性 — 用來存取資料的特殊方法。
- 事件 — 通知用的機制(之後會講)。
- 建構子 — 用來建立物件的特殊方法。
public class Person
{
// 欄位(資料)
public string Name;
public int Age;
// 方法(動作)
public void SayHello()
{
Console.WriteLine($"哈囉!我叫 {Name},我 {Age} 歲。");
}
}
這個範例我們宣告了一個 Person 類別。它有兩個欄位(Name 和 Age)和一個方法 SayHello()。這就是最簡單的類別啦。
3. 什麼是物件?
物件 就是類別的實例,也就是照「藍圖」(類別)在記憶體裡生出來的具體東西。
當你建立一個 Person 型別的變數時,你就有了一個物件——每個欄位都有自己的值。不只是「一個人」,而是比如說叫 Johnny、12 歲的那個人。當他跟我們打招呼(也就是呼叫 SayHello() 方法)時,他會「告訴」我們自己的資訊。
// 建立 Person 類別的物件
Person person1 = new Person();
person1.Name = "艾莉絲";
person1.Age = 28;
person1.SayHello(); // => 哈囉!我叫 艾莉絲,我 28 歲。
// 再建立一個「人」
Person person2 = new Person();
person2.Name = "鮑勃";
person2.Age = 32;
person2.SayHello(); // => 哈囉!我叫 鮑勃,我 32 歲。
每個物件都不是單純的複製品:它是獨立的東西,有自己的資料(在這例子裡就是名字和年齡)。
4. 類別和物件的最大差別
最大差別:
- 類別 — 「藍圖」、說明書、資料型別。
- 物件 — 這個型別的具體代表;照設計圖蓋出來的「房子」;照藍圖生產的「車」。
你可以建立無限多個同一類別的物件。比如你有 Person 類別,你可以在程式裡生出一百萬個「人」。
為什麼這樣很方便又重要?
想像一下如果沒有類別的程式。如果你有一個學生清單,就得把名字、年齡、成績等等都分開存在不同的陣列裡:
string[] studentNames = { "謝爾蓋", "格里沙", "瑪莎" };
int[] studentAges = { 20, 19, 21 };
// 如果要再加一個屬性,就要再多一個陣列。
// 想換兩個學生的位置,根本是惡夢!
用類別的話,資料就不會散落在不同陣列,而是很有邏輯地放在一起:
public class Student
{
public string Name;
public int Age;
}
Student[] students = new Student[3];
students[0] = new Student { Name = "謝爾蓋", Age = 20 };
students[1] = new Student { Name = "格里沙", Age = 19 };
students[2] = new Student { Name = "瑪莎", Age = 21 };
這樣是不是超清楚又好用!而且你還可以幫每個學生加方法(比如「打招呼」或「計算平均分數」)。
圖解:類別和物件的關係
+------------------+ +----------------+
| class Person |=========>| person1: |
| (藍圖/型別) | | Name = "艾莉絲"|
| | /| Age = 28 |
+------------------+ / +----------------+
/
+------------------------/----------------------+
/
+----------------+
| person2: |
| Name = "鮑勃" |
| Age = 32 |
+----------------+
5. 類別和物件在現實生活中的應用?
類別和物件是所有 C# 應用的基礎。你在 .NET 裡看到的所有東西:視窗、按鈕、表單、陣列、集合、資料庫連線、日誌——全部都是照某個類別生出來的物件。
舉例:
- Button 類別——就是螢幕上按鈕的說明書。每次你建立一個新按鈕,就是這個類別的物件。
- Stream 類別(I/O 系統):你會拿到一個可以操作檔案的物件。
- 你未來寫的 User 類別,用來存使用者資料——又是一個模板。
簡單說說命名、修飾詞和慣例
- 類別名稱通常用大寫開頭,比如 Person、Order、Product。
- 變數名稱用小寫開頭,比如 person、user1、orderList。
- 類別通常會設成 public,這樣整個專案都能用到它。
GO TO FULL VERSION