物件初始化器:
使用物件初始化器,可以在建立時直接向物件賦值,無需顯示的呼叫物件的建構函式。利用這個技術可發人員可以建立匿名型別,顯著的減少編寫物件初始化語句的**。
new p
不採用物件初始化器寫的**:
user =new user();
user.id=1;
user.pwd=「123」;
user.name="孫悟空"
採用物件初始化器:
user user= new user(id = 1,
,name = "孫悟空員",pwd= "123";);
初始化多個物件屬性的時候,物件初始化器幫了不少忙。那麼初始化多個物件的時候,我們也自然有了集合初始化器。
集合初始化器:
沒採用集合初始化器:
ilistusers= new list();
users.add(new user);
users.add(new user);
users.add(new user);
採用集合初始化器:
ilistusers= new list);
new user);
new user);
}
關於物件初始化器(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();
}}
物件初始化器和集合初始化器
c 語言開發團隊在c 3.0中增加了乙個名為 物件初始化器 object initializer 的特性 它能初始化乙個物件中的所有允許訪問的字段和屬性。別以為這和你沒關係。我們先來看乙個你非常熟悉不過的 user operator new user operator.id 1 operator.p...
C 物件初始化器與集合初始化器的若干問題
c 3.0 中物件初始化器 object initializers 和 集合初始化器 collection initializers 就是簡化我們的 讓本來幾行才能寫完的 一行寫完。這樣在linq的使用中,我們才不會把乙個linq表示式寫的巨複雜無比。由於我看到幾篇講 物件初始化器 object i...
擴充套件方法 物件與集合初始化器
擴充套件方法 靜態類包含的方法必須都是靜態方法。擴充套件方法允許我們在不改變原有類的情況下,擴充套件現有型別中的例項方法,是一種編譯時的技術。public static class myclass 必須是靜態類 class program 物件與集合初始化器 public class point s...