首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 核心語法入門(一):Hello World、記憶體管理、型別系統

     編輯:關於C語言

前言

C# 結合 C/C++ 效能與 Visual Basic 生產力,是 .NET 平台旗艦語言。本系列帶您從零建立扎實語法基礎,本集涵蓋第一支程式、自動記憶體管理、值/參考型別核心觀念。

1. Hello, World 解析

using System;

class Hello
{
    static void Main()
    {
        Console.WriteLine("Hello, world");
    }
}

關鍵觀念

  • 命名空間:using System; 匯入 System 命名空間,簡化 System.Console 為 Console
  • 類別包裹:C# 無全域函數/變數,所有程式碼必須在型別內部
  • Main 進入點:static void Main() 或 static int Main(string[] args)
  • 類別庫相依:C# 本身無類別庫,使用 .NET 共用類別庫(BCL)
  • 無前置宣告:宣告順序不影響編譯
  • 符號式相依:無 #include,以組件參考取代文字包含

編譯執行

csc hello.cs   // 產生 hello.exe
hello.exe      // 輸出 Hello, world

2. 自動記憶體管理:告別手動管理

垃圾收集器 (GC) 工作原理

  • 參考型別物件配置於 Managed Heap
  • 採用標記-壓縮演算法,追蹤根參考(Stack、Static、CPU 暫存器)
  • 不可達物件標記為垃圾,下次 GC 回收記憶體
  • 非決定性終結:無法預測 Finalize 執行時機

範例:Stack 類別自動管理 Node 節點

public class Stack
{
    private Node _first = null;
    public bool Empty => _first == null;

    public object Pop()
    {
        if (_first == null) throw new InvalidOperationException("Empty stack");
        object val = _first.Value;
        _first = _first.Next; // 釋放參考,Node 變不可達 → 符合 GC 回收資格
        return val;
    }

    public void Push(object o) => _first = new Node(o, _first);

    private class Node
    {
        public Node Next;
        public object Value;
        public Node(object v, Node n) { Value = v; Next = n; }
    }
}

Unsafe 程式碼:需要時才開啟

  • unsafe 關鍵字標記區塊/方法
  • fixed 釘住陣列防止 GC 移動
  • 指標操作:byte* p = &arr[0];
  • 編譯需 /unsafe 參數,執行需 SecurityPermission

3. 型別系統:值型別 vs 參考型別

分類對照

類別型別範例儲存位置指派語意
值型別int, double, bool, char, struct, enumStack (或內嵌於物件內)複製資料副本
參考型別class, interface, delegate, array, stringHeap (參考在 Stack)複製參考指向同一物件

行為差異示範

// 值型別:各自獨立
int val1 = 0;
int val2 = val1; // 複製值
val2 = 123;
Console.WriteLine(val1); // 0

// 參考型別:共享物件
class Class1 { public int Value; }
var ref1 = new Class1();
var ref2 = ref1;        // 複製參考
ref2.Value = 123;
Console.WriteLine(ref1.Value); // 123

自訂型別宣告

// 列舉
public enum Color { Red, Blue, Green }

// 結構(值型別)
public struct Point { public int X, Y; }

// 介面
public interface IBase { void F(); }
public interface IDerived : IBase { void G(); }

// 類別(參考型別)
public class A { protected void H() => Console.WriteLine("A.H"); }
public class B : A, IDerived
{
    public void F() => Console.WriteLine("B.F");
    public void G() => Console.WriteLine("B.G");
}

// 委派
public delegate void EmptyDelegate();

結構 vs 類別:選擇指南

  • 用 struct:小型、不可變、值語意、高頻配置(如座標、錢幣、日期)
  • 用 class:參考語意、多型、繼承、大型物件、需 null 語意
  • 結構不支援繼承、無參數建構子、不可為 null (除非 Nullable<T>)

總結

掌握「類別包裹一切」、「GC 自動管理」、「值/參考型別語意差異」三大核心觀念,即可避開 C# 入門最大坑洞。下集將深入控制流程、方法、屬性等實務語法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved