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

.NET Framework 3.5 新特性詳解(二):var、對象初始化器、匿名類型與擴展方法

     編輯:關於.NET

一、var 隱式類型變量

編譯器在初始化時推斷類型,非弱類型,一經推斷不可變。特點:

  1. 聲明時必須初始化(var s = "abc",不可分離)。
  2. 類型確定後不可改變(var s="a"; s=1; 編譯失敗)。
  3. 僅限局部變量。
  4. 效率等同強類型,但建議明確類型時優用強類型,避免維護困難。

適用場景:動態語言轉 C# 時,變量類型難以預判,可用 var 過渡。

二、對象與集合初始化器

對象初始化器

public class MyClass { public string Field1; public int Field2; public bool Field3; } MyClass my = new MyClass { Field1="abcd", Field2=44, Field3=true };

編譯器語法糖,僅限 public 字段/屬性。

集合初始化器

List list = new List { "data1", "data2", "data3" };

要求實現 ICollection<T>,本質調用 Add 方法。

三、匿名類型

var my = new { Field1="abcd", Field2=12 };
MessageBox.Show(my.Field1);

編譯器自動生成唯讀類型,屬性對應初始化名。可用於動態語言轉換中變量類型變化的場景:

var myVar = new { Field_String="abcd", Field_Int=12 };

四、擴展方法

將靜態方法「注入」到現有類型(含子類)中,無需修改源碼、繼承或裝飾器模式。

定義規則

  • 靜態類、靜態方法。
  • 第一個參數加 this 指定目標類型。
  • 所在命名空間需被調用方引用(using)。

示例

public static class AnyClassName {
public static string GetName(this Class1 c) => c.s + c.s;
}
Class1 c1 = new Class1(); c1.GetName(); // 如同實例方法
Class2 c2 = new Class2(); c2.GetName(); // 子類同享

等價於 AnyClassName.GetName(c1),但調用更自然,降低對靜態類的依賴。

注意事項

  1. 擴展方法類名任意,但訪問性需 ≥ 目標類型。
  2. 同名實例方法優先級高於擴展方法(無法覆蓋)。
  3. 適用於:無法修改源碼的類型擴展、多類型共享邏輯但無共同基類。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved