CodeGym /課程 /C# SELF /深入 C# 專案

深入 C# 專案

C# SELF
等級 5, 課堂 4
開放

1. C# 專案的基本結構

你的程式不是只有一個檔案,而是一堆檔案、資料夾和設定組成的集合。C# 是強型別語言,對大型應用來說,保持一切有條理很重要。如果你忽略專案結構,你的程式碼很快就會變成電子迷宮,連自己寫的 "Hello, World!" 都找不到。

而且,懂專案結構這件事,在面試時會被加分。就像你知道家裡鑰匙和遙控器放哪一樣——生活會簡單很多!

舉個例子,想像我們的 C# 專案是一個有分格的箱子:

MyFirstConsoleApp/
├── MyFirstConsoleApp.csproj
├── Program.cs
├── Properties/
│    └── launchSettings.json
├── bin/
│    └── ...(這裡會放編譯好的程式)
├── obj/
│    └── ...(這裡會放編譯過程中的暫存檔)

結構細節:

名稱 用途
MyFirstConsoleApp.csproj
專案檔案:你整個程式的「護照」,所有專案設定都寫在這。
Program.cs
主檔案,有進入點 (Main)。通常你會在這裡寫第一行程式碼。
Properties/
專案設定資料夾,例如 IDE 的啟動方式。
bin/
「成品籃」——編譯好的執行檔會放這裡。
obj/
編譯過程中的內部暫存檔(就像寫小說時的草稿,通常不會去看)。

2. 專案檔案 (.csproj)

副檔名是 .csproj 的檔案,就是專案的心臟和大腦。這裡記錄所有全域設定:語言版本、相依套件、要編譯哪些檔案、連了哪些 package 等等。切換到 Solution Explorer 的 Files 分頁看看。

Console 應用程式的範例檔案:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

</Project>
  • <TargetFramework>net9.0</TargetFramework> —— 表示這個專案是給 .NET 9 用的。
  • <OutputType>Exe</OutputType> —— 代表會產生執行檔(Windows 下是 .exe)。
  • <PropertyGroup> 區塊裡放主要參數。
  • 你可以在這檔案加 NuGet 套件、改編譯設定、開關功能。

3. 主程式檔案:Program.cs

如果把專案比喻成劇場,Program.cs 就是舞台,其他檔案都是幕後。這裡有所謂的「進入點」—— Main 方法。


// Program.cs
using System;

namespace MyFirstConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("哈囉,世界!");
        }
    }
}
Program.cs 最小範例
  • namespace —— 命名空間,幫你分組 class,避免名稱衝突。
  • class Program —— 主要 class,裡面有 Main 方法。
  • static void Main(string[] args) —— 必備進入點,程式從這裡開始跑。
  • Console.WriteLine() —— 你已經很熟的「對世界說話」方法。

更新我們的應用程式

回想一下之前的課,我們做過一個小 app,會問使用者名字然後打招呼。範例如下:


// Program.cs
using System;

namespace MyFirstConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("請輸入你的名字: ");
            string name = Console.ReadLine();
            Console.WriteLine($"歡迎, {name}! Live long and prosper.");
        }
    }
}

執行專案: 點一下綠色的 ▶️ Run 按鈕。

如果一切順利,下面會出現 Run 分頁。 你會看到程式已經啟動,並等你回答 請輸入你的名字:。直接在 console 輸入名字(例如 "Cat")然後按 Enter。

按下 Enter 之後,程式會處理你的輸入,然後顯示帶你名字的歡迎訊息。程式結束,結果就出來了。

4. 怎麼寫自己的程式碼:基本規則

要在哪裡寫程式碼?

一開始主要邏輯最好都寫在 Program.cs 的 Main 方法裡。等應用變大再慢慢加新檔案和 class,現在先別急,最有趣的都在這裡發生。

在 Main 裡可以(和不可以)做什麼?

  • 可以:宣告變數、寫運算、呼叫方法、輸出/讀取資料。
  • 不可以:在方法或 class 外面寫程式碼(例如直接寫 Console.WriteLine("Hello"); 在 Main 外面——這樣不行!)。

註解

寫註解給自己和別人看。單行註解用 //,多行註解用 /* ... */。越容易猜出你為什麼寫這段神祕程式碼越好。

// 這是一行註解

/*
 這是—
 多行註解。
*/

5. 程式怎麼執行?

你的程式永遠從 Main 方法開始執行。Main 之前的東西都會被忽略。想在啟動時做什麼?就寫在 Main 裡。

範例——簡化流程圖(程式碼 → 執行):

程式開始
     |
     v
Main 方法
     |
     v
依序執行 Main 裡的指令
     |
     v
程式結束

6. 應用怎麼長大:加新檔案

什麼時候該加新檔案?

當你的程式碼一頁放不下,變數也記不住時,就是該拆開來寫的時候了。

舉例:你做計算機,可以新建一個 Calculator.cs,把相關 class 搬過去。

MyFirstConsoleApp/
├── Program.cs
├── Calculator.cs  // 新檔案,放計算機邏輯

在 Rider 裡怎麼加新檔案

  1. 在 Solution Explorer 樹狀圖裡,右鍵點專案 → "Add" → "New File"(或 "New Class")。
  2. 給檔案取個有意義的名字。
  3. 在檔案裡寫新 class 或 function。
// Calculator.cs
namespace MyFirstConsoleApp
{
    class Calculator
    {
        public static int Add(int a, int b)
        {
            return a + b;
        }
    }
}

然後在 Program.cs 用它:

// Program.cs
using System;

namespace MyFirstConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int sum = Calculator.Add(2, 3);        //用 Calculator class 的 Add 方法
            Console.WriteLine($"2 + 3 = {sum}");
        }
    }
}

7. 「編譯」和「執行」——底下發生什麼事?

當你按下 Run(或 F5),IDE 會:

  • 檢查語法,把你的程式碼編譯成二進位檔(.exe 或 .dll),放到 bin/Debug/net9.0/ 或 bin/Release/net9.0/。
  • 執行編譯好的檔案。
  • 把結果輸出到你看到的 terminal/console。

bin/ 和 obj/:這些資料夾幹嘛用?

  • bin/ —— 這裡放你的成品(編譯好的程式)。
  • obj/ —— 這裡放暫存檔,編譯器用來做中間運算。

通常這兩個資料夾可以直接忽略,內容會自動重建。

8. 寫程式和專案常見錯誤

寫程式不是亂敲鍵盤。只要出現像 CS5001: Program does not contain a static 'Main' method suitable for an entry point 這種錯誤,大家就會開始瘋狂 Google,IDE 也會用更難懂的語言罵你。

  • 常見錯誤之一——程式碼寫在方法或 class 外面。在 C# 裡不能直接把表達式寫在檔案裡。所有東西都要包在 class 和方法裡!
  • 檔名和 class 名字不一樣。雖然可以這樣做,但最好讓檔案和 class 名字一致、好懂——對你和未來同事都方便。
  • 命名空間搞混。如果你在不同 namespace 建了 class,記得用 using 把它引進來。
  • 忘記進入點。如果你刪掉或改名 Main 方法,程式就跑不起來。
2
任務
C# SELF, 等級 5, 課堂 4
上鎖
數字的數量
數字的數量
2
任務
C# SELF, 等級 5, 課堂 4
上鎖
三個數字中的最小值
三個數字中的最小值
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION