CodeGym /課程 /C# SELF /類別與物件的概念

類別與物件的概念

C# SELF
等級 16 , 課堂 0
開放

1. 前言

你應該已經聽過,類別 就是模板,而 物件 是它的實例。
但現在是時候更深入搞懂類別和物件啦!

想像你是汽車工廠的工程師。你不用每台車都自己手工組裝,而是先畫好一份藍圖——一份可以組出很多同款車的通用說明書。這份藍圖會寫清楚車子要有引擎、輪子、車身、顏色,還有它能做什麼事。

這份藍圖在程式世界裡就叫做 類別

然後想像工廠照著這份藍圖生產了一批車。每一台都是實體、真的能上路、有自己的車牌、顏色,甚至還有一些個人化設定。但它們全都是照同一份藍圖組出來的。

這些實體車在程式世界裡就叫做 物件(或叫類別的實例)。

所以,記住:

  • 類別 就像藍圖、模板、設計圖。它描述了某個東西可以有什麼資料(像是品牌、顏色、門數)和可以做什麼事(像是開車、煞車、按喇叭)。類別只是描述,不會佔很多記憶體,也不是什麼「活的」東西。
  • 物件 就是照類別藍圖組出來的「車」。它是你程式裡真的「活著」的東西,會佔記憶體,有自己的資料(像是車牌、顏色),也能做類別裡寫的那些事。

聽起來有點抽象?別擔心,馬上就會搞懂。

2. 什麼是類別?

類別 是一種自訂資料型別,描述這種型別的物件應該長怎樣:有什麼特徵(狀態/屬性/欄位),還有可以做什麼動作(行為/方法/函式)。

類別會定義:

  • 欄位(變數) — 存在物件裡的資料。
  • 方法(函式) — 物件可以做的動作。
  • 屬性 — 用來存取資料的特殊方法。
  • 事件 — 通知用的機制(之後會講)。
  • 建構子 — 用來建立物件的特殊方法。

public class Person
{
    // 欄位(資料)
    public string Name;
    public int Age;

    // 方法(動作)
    public void SayHello()
    {
        Console.WriteLine($"哈囉!我叫 {Name},我 {Age} 歲。");
    }
}

這個範例我們宣告了一個 Person 類別。它有兩個欄位(NameAge)和一個方法 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 類別,用來存使用者資料——又是一個模板。

簡單說說命名、修飾詞和慣例

  • 類別名稱通常用大寫開頭,比如 PersonOrderProduct
  • 變數名稱用小寫開頭,比如 personuser1orderList
  • 類別通常會設成 public,這樣整個專案都能用到它。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION