c# 3.0 中物件初始化器(object initializers) 和 集合初始化器(collection initializers) ,就是簡化我們的**,讓本來幾行才能寫完的**一行寫完。這樣在linq的使用中,我們才不會把乙個linq表示式寫的巨複雜無比。
由於我看到幾篇講 物件初始化器(object initializers)和集合初始化器(collection initializers) 的文章,都是乙個簡單的例子,一些稍稍特殊一點的場景的初始化賦值並沒有涉及,所以我特整理這篇部落格。
關於物件初始化器(object initializers) 的一些問題:
問題一: 物件初始化器允許只給部分值賦值麼?即不給其中一些值賦值
問題二:物件初始化器允許給internal 的成員賦值?(私有成員肯定不用想了,肯定不能賦值。)
public class person
public string lastname
public int age
private int test01 = 25;
internal int test02;
} class program
;console.writeline(person.test02);
console.writeline(person.age);
console.readline();
}問題三:物件初始化器是否可以結合建構函式一起使用?
答案:可以參看如下**就可以正常使用:
var cookie3 = new system.net.cookie("mycookie", "jose") ;
我們在建構函式中給 cookie 的名字和值賦了值,在初始化構造器中給 comment 屬性賦了值。
問題四:建構函式賦值和初始化構造器賦值那個最先被執行?
比如下述**,結果是那個呢??
static void main(string args)
;console.writeline(cookie.name);
console.readline();
} 答案:
建構函式比初始化構造器更早被執行。
上述writeline 寫出來的資訊為:test02
集合初始化器(collection initializers) 的一些問題:
問題一:集合初始化構造器中是否可以構造集合的一項為空值?
答案:可以,參看下述**。
問題二:集合初始化構造器是否可以初始化hashtable ?
答案:可以。這時候相當於用了兩個物件初始化構造器,參看下面**:
public class person
public string lastname
public int age
private int test01 = 25;
internal int test02;
} class program
,new person ,
new person ,
null,
}; hashtable pp = new hashtable },
}, },
,};
console.readline();}}
物件初始化器與集合初始化器
物件初始化器 使用物件初始化器,可以在建立時直接向物件賦值,無需顯示的呼叫物件的建構函式。利用這個技術可發人員可以建立匿名型別,顯著的減少編寫物件初始化語句的 new p 不採用物件初始化器寫的 user new user user.id 1 user.pwd 123 user.name 孫悟空 採...
物件初始化器和集合初始化器
c 語言開發團隊在c 3.0中增加了乙個名為 物件初始化器 object initializer 的特性 它能初始化乙個物件中的所有允許訪問的字段和屬性。別以為這和你沒關係。我們先來看乙個你非常熟悉不過的 user operator new user operator.id 1 operator.p...
C 物件初始化器
在c 3.0中增加了乙個名為 物件初始化器 object initializer 的特性 它能初始化乙個物件中的所有允許訪問的字段和屬性。具體地說,在建立物件的構造器呼叫之後,你現在可以增加一對大括號,並在其中新增乙個成員初始化列表。每個成員的初始化操作都是乙個賦值操作,等號左邊是乙個允許訪問的字段...