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

C# 3.0 筆記:var 關鍵字與擴充方法完整解析

     編輯:關於C#

系統整理 C# 3.0 兩大基石特性——var 隱式型別區域變數與擴充方法的語法規則、編譯行為、IL 驗證、命名空間導入策略與完整實戰範例。

var 關鍵字

編譯器推斷驗證


var i = 0;        // int32
var b = true;     // bool
var s = "Henllyee"; // string

IL 區域變數簽名:.locals init ([0] int32 i, [1] bool b, [2] string s) —— 編譯期確定具體型別。

foreach 搭配


var list = new List<int> { 1, 2, 4, 100 };
foreach (var item in list) { Console.Write(item + ", "); }

四大使用限制

  1. 必須初始化
  2. 不可為 null
  3. 不可作為方法參數/回傳型別
  4. 不可用於類別成員(欄位/屬性)

擴充方法

定義三要素

  1. 靜態類別
  2. 靜態方法
  3. 第一個參數加 this 修飾

範例:擴充 object 顯示定義組件


public static string DisplayDefiningAssembly(this object obj)
{
    return $"{obj.GetType().Name} lives here:\n\t{Assembly.GetAssembly(obj.GetType())}";
}

呼叫方式


DataSet ds = new DataSet();
Console.Write(ds.DisplayDefiningAssembly()); // 實例方法語法
// 或
ObjectExtensions.DisplayDefiningAssembly(ds); // 靜態方法語法

命名空間導入策略

關鍵原則: 擴充方法僅在 using 其所在命名空間時可見。

推薦做法

  • 將擴充方法類別置於目標型別的命名空間(如 System),實現「零導入可見」
  • 或建立專用命名空間(MyApp.Extensions),按需 using

完整範例:擴充 int 型別


// HenllyeeExtensions.cs
namespace System // 置於 System 命名空間,string/int 等自動可見
{
    public static class HenllyeeExtensions
    {
        public static void Foo(this int i, string msg)
        {
            Console.WriteLine($"{i} called Foo() say '{msg}'");
        }
    }
}

// 使用端(無需額外 using)
int i = 0;
i.Foo("Hello, Henllyee!"); // 直接可見

優先順序規則總結

  1. 實例方法
  2. 同命名空間擴充方法
  3. 較近 using 命名空間擴充方法
  4. 較遠 using 命名空間擴充方法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved