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

C# 3.0 學習筆記:隱式型別區域變數與擴充方法實戰

     編輯:關於C#

記錄 C# 3.0 兩大核心特性的語法要點、限制與實戰應用模式,作為快速查閱參考。

隱式型別區域變數

語法與推斷


var i = 123;           // int
var d = 123.123;       // double
var s = "oec2003";     // string
var arr = new[] { 1, 2, 3, 4 }; // int[]

關鍵限制

  • ❌ 必須初始化:var x; x = 1; → 編譯錯誤
  • ❌ 不可為 null:var x = null; → 編譯錯誤
  • ❌ 僅限區域變數:不可用於欄位、屬性、參數、回傳型別
  • ✅ 可用於 for、foreach、using 陳述式

強型別本質


var x = 10; 
x = "abc"; // 編譯錯誤:無法將 string 轉換為 int

var 非動態型別,編譯期確定為具體型別,IL 與顯式宣告無異。

擴充方法

定義規則

  1. 定義於非泛型靜態類別
  2. 方法為 static
  3. 第一個參數加 this 修飾,型別為擴充目標

實戰範例:Email 驗證擴充


public static class StringExtensions
{
    public static bool IsValidEmail(this string s)
    {
        if (string.IsNullOrEmpty(s)) return false;
        return Regex.IsMatch(s, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
    }
}

// 使用:像呼叫實例方法一樣
string email = "test@example.com";
if (email.IsValidEmail()) 
    Console.WriteLine("Valid");
else 
    Console.WriteLine("Invalid");

命名空間導入

擴充方法所在命名空間必須被 using 導入才可見。建議將通用擴充方法置於專用命名空間(如 MyApp.Extensions),按需導入。

優先順序規則

  1. 實例方法(最高)
  2. 同命名空間內擴充方法
  3. 較近 using 命名空間的擴充方法
  4. 較遠 using 命名空間的擴充方法

進階:泛型擴充方法


public static class EnumerableExtensions
{
    public static bool IsNullOrEmpty<T>(this IEnumerable<T> source)
    {
        return source == null || !source.Any();
    }
}

// 使用
List list = null;
if (list.IsNullOrEmpty()) { /* ... */ }

實戰建議

  • ✅ 為不可修改型別(BCL、第三方庫)添加輔助方法
  • ✅ 建立流暢介面:query.Where(...).OrderBy(...).Select(...)
  • ✅ 封裝重複驗證/轉換邏輯
  • ❌ 避免過度擴充核心型別(string, int 等),污染全域命名空間
  • ❌ 不要用擴充方法取代應屬於型別核心職責的方法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved