C 物件初始化器與集合初始化器的若干問題

2021-05-27 05:24:09 字數 1734 閱讀 1549

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 的特性 它能初始化乙個物件中的所有允許訪問的字段和屬性。具體地說,在建立物件的構造器呼叫之後,你現在可以增加一對大括號,並在其中新增乙個成員初始化列表。每個成員的初始化操作都是乙個賦值操作,等號左邊是乙個允許訪問的字段...