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

C# 3.0 核心特性速覽:var 關鍵字與擴展方法完整指南

     編輯:關於C語言

var 關鍵字:隱式類型區域變量

聲明語法


var i = 0;
var flag = true;
var text = "Henllyee";

編譯器推斷機制

編譯器根據初始化表達式的靜態類型推斷變量類型,生成 IL 與顯式聲明無異。var 非動態類型,非 variant,純編譯期語法糖。

foreach 應用


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

四大使用鐵律

  1. 必須初始化:聲明即賦值,否則編譯器無法推斷
  2. 不可為 null:var x = null; 報錯「無法從 null 推斷類型」
  3. 僅限區域變量:字段、屬性、參數、返回類型均禁用
  4. 類型不可變:推斷確定後不能賦值其他類型

擴展方法:為現有類型無痕增強

由來與動機

類型編譯入程序集後定義固化。傳統擴展途徑:修改源碼重編譯、繼承(密封類不可繼承)、反射(性能差、非強類型)。C# 3.0 擴展方法提供靜態語法糖方案:編譯期將實例調用重寫為靜態調用,零運行開銷。

定義三要素

  1. 靜態類
  2. 靜態方法
  3. 首參數 this T 指定擴展類型 T

經典示例:為 object 添加程序集信息顯示


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

// 調用
var ds = new DataSet();
Console.WriteLine(ds.DisplayDefiningAssembly());

調用形式雙重性


// 實例語法(推薦,流暢)
ds.DisplayDefiningAssembly();

// 靜態語法(等價,編譯器實際生成此形式)
ObjectExtensions.DisplayDefiningAssembly(ds);

擴展方法進階:優先級、衝突與組織

優先級規則(高→低)

  1. 目標類型實例方法
  2. 當前命名空間擴展方法
  3. 外層 using 命名空間擴展方法(越近越優先)

同名衝突演示


public class Sample { public void Func() => Console.WriteLine("實例"); }
public static class Ext { public static void Func(this Sample s) => Console.WriteLine("擴展"); }

new Sample().Func(); // 輸出:實例
// Ext.Func(new Sample()); // 顯式調用擴展方法

命名空間組織建議

  • 通用基礎擴展:專用命名空間(如 MyApp.Extensions)+ 項目級 global using
  • 領域專用擴展:與領域模型同命名空間,按需引入
  • 避免污染 System 命名空間

總結

var 消除冗餘類型聲明,擴展方法打破類型封閉邊界。兩者皆為編譯期語法糖,零運行開銷,卻極大提升代碼表達力。掌握限制規則、優先級邏輯、命名空間策略,即可在項目中自信地應用這兩大 C# 3.0 基石特性。

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