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

LINQ 學習筆記(二).NET 3.x 新特性回顧(二):自動屬性 IL 實作、隱含型別區域變數

     編輯:關於C語言

自動屬性:編譯器自動生成支援欄位與存取器


public class Test1
{
    public int Int1 { get; private set; }
    public string String2 { get; set; }
}

IL 層面真相

  • 生成私有支援欄位:<Int1>k__BackingField(名稱含特殊字元,避免與使用者代碼衝突)
  • 生成 get_Int1()、set_Int1(int32) 兩個方法
  • 若 set 為 private,對應 set_Int1 為 private 方法
  • 傳統屬性若只寫 get,則不會產生 set_XXX 方法

跨語言互通性考量

IL 以方法實作屬性,使不支援屬性語法的語言(如早期 Managed C++)仍可透過 get_XXX/set_XXX 存取。但 C# 禁止直接呼叫這些方法(編譯錯誤:「cannot explicitly call Operator or Accessor」)。

命名衝突防護

若使用者代碼定義同名 get_Int1 方法,編譯器報錯:「Type already reserves a member called 'get_Int1'」

隱含型別區域變數


// 傳統
int[] a = new int[10];

// var 推斷
var a = new int[10]; // 編譯期確定為 int[]
a.GetType().ToString() // "System.Int32[]"

var 關鍵規則

規則說明
僅限區域變數不可用於欄位、屬性、方法參數、回傳型別
宣告必須初始化var x; 編譯錯誤
型別不可變初始化後型別固定,指派不同型別會編譯錯誤
非動態型別非 JavaScript var,C# 仍為靜態強型別

結語

自動屬性與 var 皆為編譯器語法糖,IL 層面無新機制。理解其生成細節,有助於除錯、反射操作與避免命名衝突。

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