C 初始化器和建構函式初始化器

2021-07-25 15:57:04 字數 1481 閱讀 5867

初始化器分為物件初始化器和集合初始化器。下面一一介紹。

物件初始化器

物件初始化器的作用,簡單點說就是可以使我們初始化乙個類的**變得更簡潔。比如下面這個類:

class

person

public

int age

public

string address

}

我們要初始化它並對它賦值的話通常要這樣:

person person = new

person();

person.name = "

slark";

person.age = 100

;person.address = "

xi'an

";

這裡我們用了一行建立物件語句,加三行賦值語句。這裡光person這個變數就出現了4遍,繁瑣。用物件初始化器來代替這些操作:

person person = new person ;

同樣的效果,物件初始化器只用了一行,簡潔!可以看到物件初始化器將建立物件和賦值合為一行,其中賦值就是在後面大括號裡做的。這裡的賦值可以給所有屬性賦值,也可以給部分屬性賦值。

集合初始化器

既然要講集合初始化器,那麼我們就先來建立乙個集合:

list intlist = new list();

intlist.add(1);

intlist.add(2);

intlist.add(

3);

好,這裡我們用4行**建立了乙個3個元素的集合。集合初始化器的出現大大減少了我們對這種操作的**量。其對應的集合初始化器**為:

list intlist = new list ;

嗯,真的少寫了很多。集合初始化器的原理也很簡單,就是它默默的為我們呼叫了list的add方法依次為我們新增了這3個元素。

這裡我們再給乙個綜合運用集合初始化器和物件初始化器的例子:

listpersonlist = new list,

new person ,

new person

};

**裡用集合初始化器初始化了personlist,然後用物件初始化器初始化了3個person物件例項。

建構函式初始化器

c#建構函式初始化符可以包含對同乙個類的另乙個建構函式的呼叫(使用前面介紹的語法),也可以包含對直接基類的建構函式的呼叫(使用相同的語法,但應使用base關鍵字代替this)。初始化符中不能有多個呼叫。 

class car 

// etc

}

這裡,this關鍵字僅呼叫引數最匹配的那個建構函式。注意,建構函式初始化器在建構函式之前執行。現在假定執行下面的**: car mycar = new car("proton persona"); 在本例中,在帶乙個引數的建構函式執行之前,先執行帶2個引數的建構函式

構造器初始化

構造器初始化 1.初始化順序 即使變數定義分散於方法定義之間,它仍會在任何方法 包括構造器 被呼叫之前得到初始化。變數定義的先後順序決定了初始化的順序 例 package clear class window class house window w2 new window 2 void f win...

建構函式初始化列表和初始化函式

其實並沒有所謂的初始化函式的概念,本文中的初始化函式只是說明在函式體內進行賦值。而初始化列表才是真正意義上的物件初始化。使用初始化列表效率會高一點。c 規定,物件的成員變數的初始化動作發生在進入建構函式本體之前。在建構函式體內只是賦值,並不是初始化。請看下面這個栗子 class base publi...

物件初始化器和集合初始化器

c 語言開發團隊在c 3.0中增加了乙個名為 物件初始化器 object initializer 的特性 它能初始化乙個物件中的所有允許訪問的字段和屬性。別以為這和你沒關係。我們先來看乙個你非常熟悉不過的 user operator new user operator.id 1 operator.p...