c#6 新增特性目錄
1private
static
void
main()2,
5 ,
6 7};
8 }
早c#3中引入的集合初始化器,可是讓我們用上面的語法來在宣告乙個字典或者集合的時候立即初始化一些項進去,其實在c#3中這是個語法糖,實質編譯後的結果是呼叫字典或者集合的add方法逐一新增這些項。但是有一點小小的不直觀。先看看這個版的il吧:
1 .method private hidebysig staticvoid
main() cil managed
2 //
end of method program::main
本質是add方法的呼叫.c#6引入了一種新語法來進一步的優化這種寫法。
1private
static
void
main()2;
9 }
看起來直觀許多了吧,其實是一種語法改進。編譯結果也有些許差異,如下:
1 .method private hidebysig staticvoid
main() cil managed
2 //
end of method program::main
主要差異在於老語法是呼叫add方法,新語法是用的索引器的set訪問器(set_item)。
既然是索引,那麼就索引就不僅僅只能是int,也可以是string,任意的自定義型別。
namespacecsharp6
public
int age
private dictionary _cache = new dictionary();
public address this[string
name]
set }}
public
class
address
public
string zip
}private
static
void
main()
;//列舉索引
var colors = new dictionarystring>;
//自定義型別的索引器支援
person person = new
person,[
"work
"] = new address
};//自定義型別索引
var persons = new dictionary>] = new list},[
new person ] = new list
},};}}
}
從本質來看,[***]=yyy這種語法,***可以是任意型別,凡是有索引器支援的型別,均可以使用這種語法。簡單直接明了。
C 初始化器和建構函式初始化器
初始化器分為物件初始化器和集合初始化器。下面一一介紹。物件初始化器 物件初始化器的作用,簡單點說就是可以使我們初始化乙個類的 變得更簡潔。比如下面這個類 class person public int age public string address 我們要初始化它並對它賦值的話通常要這樣 per...
C 物件初始化器
在c 3.0中增加了乙個名為 物件初始化器 object initializer 的特性 它能初始化乙個物件中的所有允許訪問的字段和屬性。具體地說,在建立物件的構造器呼叫之後,你現在可以增加一對大括號,並在其中新增乙個成員初始化列表。每個成員的初始化操作都是乙個賦值操作,等號左邊是乙個允許訪問的字段...
初識C 初始化器
書上定義 初始化器 c 3.0以後新增內容 為物件 集合以及泛型集合的例項化和初始化提供一種更加簡潔的 形式。其實,我們在變數宣告時,就可選初始化器 變數宣告 有效的修飾符組合 opt 型別 變數名 初始化器 opt opt表示可選 比如 int a 1 public static int b 2 ...