CodeGym /課程 /C# SELF /C# 典型程式結構

C# 典型程式結構

C# SELF
等級 8 , 課堂 1
開放

1. 程式就像一間有很多部門的辦公室

剛開始學寫程式的時候,會覺得只要一行一行寫下去就好了,反正都會動。但只要程式稍微複雜一點,腦袋就開始亂:哪裡是什麼、為什麼要這樣寫、如果要改一行,到底在哪裡?…

所以 C#,跟大多數現代語言一樣,給我們一種「把程式碼分類」的方法,讓你隨時都能搞懂程式在做什麼,也能很快找到你要改的地方。

想像一下公司。有 HR 部門、會計部、IT 部門、物流部門等等。每個部門有自己的責任、員工和任務。

C# 程式裡,每個這種「部門」就是一個類別。有的類別負責處理使用者,有的負責計算,有的負責檔案。

這是一個簡單專案的典型結構:

  • Program.cs — 總公司:這裡是「進入點」,一切從這裡開始。
  • User.cs — 處理和儲存使用者資料的部門。
  • Calculator.cs — 計算部門。
  • FileHelper.cs — 檔案專家。

就算是很小的程式,通常也會有至少一個類別。大型專案就是一棟有幾百個類別的「摩天大樓」!

2. 類別就是工具箱

C# 是物件導向語言,所有東西都是物件。物件的型別叫做類別

類別就像一個箱子或櫃子,裡面放著我們需要的東西:變數、方法、屬性。想像一個寫著「鐵鎚」的箱子,裡面只放跟鐵鎚有關的工具。

class Example
{
    // 這裡會放我們的工具:變數、方法、屬性
}
C# 類別宣告

類別通常會有變數和函式。在 C# 裡,類別的變數叫做欄位,類別的函式叫做方法。但意思都一樣。

還記得我們的第一段程式嗎?

Console.WriteLine("大家好!");
string name = Console.ReadLine();

這段程式裡有類別也有方法:

  • Console — 這是個類別,裡面有處理主控台的各種方法(函式)。
  • WriteLine — 這是 Console 類別的方法,會把文字印到螢幕上。
  • ReadLine — 這是 Console 類別的方法,會讀取鍵盤輸入。

其實寫程式就是一直寫自己的類別和方法,然後呼叫別的類別的方法。

3. 類別的欄位(變數)就是它的記憶體

在類別裡可以存變數(常叫「欄位」)。這就像記憶格子,把資料放進去。

class Counter
{
    int value; // 欄位 — 這裡會存 Counter 的目前值
}
類別欄位(變數)範例

欄位讓類別在呼叫不同方法時能記住東西。比如記錄按鈕被按了幾次。

欄位可以有很多個。舉個例子:

class User
{
    int id;             // 使用者的唯一編號
    string name;        // 使用者名稱
    int age;            // 年齡
    string adress;      // 地址
    User[] children;    // 小孩
}

4. 方法 — 類別能做的事

方法就是我們類別的「技能」。如果類別是員工,方法就是他的本事:他會做什麼。

  • 方法可以印東西到螢幕上
  • 計算兩個數字的和。
  • 接收「輸入」資料並回傳結果。

方法的結構:

  • 回傳值型別(例如 void — 不回傳東西,或 int — 回傳數字)
  • 方法名稱(例如 Print
  • 括號裡的參數(可以沒有)
  • 大括號 { ... } — 方法內容
class Printer
{
    public void PrintHello()
    {
        Console.WriteLine("Hello!");
    }

    public int Add(int a, int b)
    {
        return a + b;
    }
}
類別方法範例

關於方法和相關細節,我們之後的課會再詳細講。

5. 屬性 — 聰明的變數

屬性(property)就像「升級版」的變數:不只存值,還能在取得或改變值時做點事。

舉個例子:你不能隨便改員工薪水 — 會計會檢查對不對。屬性也能「檢查」資料:

class Person
{
    private int age;		// 類別的變數(欄位)

    public int Age			// 屬性 Age。資料存到類別變數 age。
    {
        get { return age; }	// get 方法 - 當有人要取得 Age 時會呼叫
        set 				// set 方法 - 當有人要改 Age 時會呼叫
        {
            if (value >= 0)
                age = value;
        }
    }
}

set 方法裡的程式碼不會讓你設負的年齡。屬性我們之後會再細講。

6. 存取修飾詞

在 C# 裡你可以決定類別的哪些部分能被其他類別看到,哪些只能自己用。這就是存取修飾詞。如果欄位、方法或類別前面有 public,那整個程式都能用它。

如果前面是 private,那只有自己類別裡能用。其他類別根本看不到,好像不存在一樣。

  • public — 大家都看得到。這種方法和屬性可以給其他類別用。
  • private — 只有自己類別裡看得到。這是內部細節,不給別人碰。
class Demo
{
    public int OpenValue;     // 外面看得到
    private int secretValue;  // 只有自己看得到

    public void ShowOpen() { Console.WriteLine(OpenValue); }
    private void HideSecret() { Console.WriteLine(secretValue); }
}

黃金法則:欄位通常設成 private,只把需要的方法和屬性(public)「公開」出去。

7. 真實的類別長怎樣

這是一個「組合」範例 — 迷你計算機:

class Calculator
{
    private int result; // 存結果的欄位

    public int Result
    {
        get { return result; }
        private set { result = value; } // 只有類別內部能設
    }

    public void Add(int a, int b)
    {
        result = a + b;
    }

    public void Clear()
    {
        result = 0;
    }
}

這種寫法幾乎所有現代 C# 程式都會用!

8. Top-level statements

其實在 C# 裡,所有程式碼都在類別裡。類別是最小的程式單位。你可以有很多類別,但至少要有一個。

等等,那我們剛剛寫的那些程式,明明沒看到類別啊?!

這就是 C# 新潮的功能:你可以直接寫沒類別的程式,C# 編譯器會自動幫你包成類別。

假設你在 Program.cs 裡寫這樣的程式:

// 你的程式碼
WriteSmile();
WriteSmile();
WriteSmile();

//你自己的函式
void WriteSmile()
{
    Console.WriteLine(":)");
}
Top-level statement:沒類別的程式碼

C# 編譯器會把它變成這樣:

using System;

class Program
{
    static void Main()			// 你的程式碼
    {
        WriteSmile();
        WriteSmile();
        WriteSmile();        
    }

    static void WriteSmile()	//你自己的函式
    {
        Console.WriteLine(":)");
    }
}
編譯器怎麼把 top-level statement 變成類別

如果你只看懂一半也沒關係:重點是你抓到大意。接下來的課我們會一步步拆解這些內容。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION