編譯器在初始化時推斷類型,非弱類型,一經推斷不可變。特點:
var s = "abc",不可分離)。var s="a"; s=1; 編譯失敗)。適用場景:動態語言轉 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),但調用更自然,降低對靜態類的依賴。