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

C# 到 IL 深度解析:第4章 關鍵字與操作符 (下)(5) - 類型轉換 castclass、存取修飾符約束與建構函數

     編輯:關於C語言

castclass 指令實現類型轉換

C# (xxx)a 編譯為 castclass xxx。若轉換失敗拋 InvalidCastException。需確保物件確實為目標類型或其子類。

存取修飾符約束:C# vs IL

  • C#:方法存取性不得大於類別存取性(public 方法不能在 private 類別中)。
  • IL:無此約束,public 方法可在 private 類別中。

建構函數與繼承鏈

// C# 代碼
public class bb : aa {
    public bb() : this(20) { Console.WriteLine("in const bb"); }
    public bb(int i) : base(i) { Console.WriteLine("in const bb" + i); }
}

IL 呼叫順序:

  1. bb() → this(20) (呼叫 bb(int))
  2. bb(int) → base(i) (呼叫 aa(int))
  3. aa(int) → base() (呼叫 Object.ctor)
  4. 依序返回執行各建構函數本體。

輸出:in const aa20、in const bb20、in const bb。

base/this 編譯期綁定

base、this 在 IL 中不存在,編譯器直接發出對應建構函數的 call 指令。

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