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

C++ 開發者快速上手 C# 核心語法差異(三):類別、例外與不安全程式碼

     編輯:關於C語言

類別定義與存取修飾詞

C# 類別語法與 C++ 相似,但細節差異較大。基本範例:

class MyClass : MyBaseClass  // 基類無需存取修飾詞
{
    private int a;
    public int Num() { return 0; }
}

public class MyBaseClass { }

C# 類別存取修飾詞:

  • internal(預設):僅限目前專案內存取
  • public:任何專案皆可存取
  • abstract:抽象類別,不可實例化,可包含抽象成員
  • sealed:密封類別,不可被繼承

修飾詞可組合使用(如 public abstract)。

關鍵差異:單一繼承、隱式 Object 繼承、無分號結尾

  • 單一繼承:C# 不支援多重繼承,每個類別僅能有一個基類。
  • 存取層級限制:衍生類別存取層級不可高於基類(internal 可繼承 public,反之不可)。
  • 隱式繼承 Object:無基類時隱式繼承 object,可使用其方法(ToString()、Equals() 等)。
  • 方法實作必須在類別內部:不像 C++ 可分離宣告與實作,C# 所有程式碼必須寫在類別內(類似 inline 但非真正內聯,由 JIT 決定)。
  • 類別定義結尾無分號:class A { } 而非 class A { };。

欄位、建構函式與解構函式

1. 欄位可直接初始化

class MyClass { int count = 10; }  // C++ 需在建構函式初始化

2. 建構函式與靜態建構函式

實體建構函式不允許在其中初始化欄位(欄位初始化器先執行)。C# 新增靜態建構函式:

public class MyClass
{
    static MyClass()  // 無修飾詞,無參數
    {
        // 程式啟動時自動執行,用於初始化靜態欄位
    }
}

3. 解構函式語意大不同

C# 有垃圾回收機制,不需在解構函式釋放記憶體。解構函式(~MyClass())實際上是 Finalize() 的語法糖,僅在實作 IDisposable 或需釋放非受控資源時使用。

虛擬方法與運算子多載

虛擬方法

// 基類
public virtual void MyMethod() { }

// 衍生類
public override void MyMethod() { }

關鍵字:基類用 virtual,衍生類用 override(C++ 僅用 virtual)。

運算子多載限制

原理類似 C++,但禁止多載:+=、-=、*=、/=、%=、位元指派、邏輯運算子(&&、||)、指派運算子(=)。

成對多載規則:多載 > 必須多載 >=;多載 == 必須多載 !=;同理 </<= 等。

例外處理:finally 區塊保證執行

try { }
catch { }
finally { }  // 無論是否拋出例外,finally 都會執行

這與 C++ 的 RAII 模式不同,C# 透過 finally 確保資源清理邏輯必定執行。

不安全程式碼與指標

C# 允許使用指標,但必須標記為 unsafe 區塊:

public unsafe int Num() { return 0; }  // 方法層級
unsafe class MyClass { }                // 類別層級
unsafe struct MyStruct { }              // 結構層級

編譯需加入 /unsafe 參數。指標語法與 C++ 相同(int* p),但僅能在 unsafe 範圍內使用。

介面:C++ 無此概念的契約式設計

介面源自 COM,僅定義方法與屬性簽章(類似純抽象類別)。關鍵字 interface:

interface IMyInterface
{
    void DoSomething();
    int MyProperty { get; set; }
}
  • 類別實作介面採用繼承語法:class MyClass : IMyInterface
  • 類別可實作多個介面(多重實作),彌補單一繼承限制
  • 介面成員預設 public,不可加修飾詞

結語

本系列著重 C++ 開發者最常用的語法對比。C# 進階特性(委派、事件、屬性、泛型、LINQ、非同步等)建議參考《C# 高級程式設計》等經典教材深入學習。掌握 .NET 執行機制(CLR、GC、JIT)同樣重要,祝各位在 .NET 生態系發展長遠!

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