Dart建構函式

2021-10-09 12:56:23 字數 2473 閱讀 6896

2.構造函式呼叫父類建構函式的順序

3.建構函式傳遞

classname(.

..)//普通建構函式

classname.

identifier(.

..)//命名建構函式

const

classname(.

..)//常量建構函式

factroy classname(.

..)//工廠建構函式

使用:

var p1 =

point(2

,2);

//dart2中,可以省略建構函式前的new

var p2 = point.

fromjson()

;var p =

const

immutablepoint(2

,2);

//常量建構函式,用來建立編譯期常量

如果定義了乙個類,而沒有定義建構函式,那麼它將有乙個預設的無參建構函式。如果這個類有父類,那麼預設建構函式還會呼叫父類的無引數建構函式。

class

point

}

上例中只有兩個成員變數,如果有十幾二十個成員變數,那麼寫起來就很不舒服了!不用怕!dart有語法糖哦!

class

point

它可以將x,y的賦值變得簡單一些,就不用寫建構函式的方法體了,但要記得括號後面要用分號。

class

point

}

注意:命名建構函式不可繼承,如果子類想要有和父類一樣的命名建構函式,那就寫個同名的(通常也會在子類的命名建構函式裡,呼叫父類的同名命名建構函式)。

class

immutablepoint

如果類建立的物件永遠不會改變,可以在編譯期就建立這個常量例項,並且定義乙個常量建構函式,並且確保所有的成員變數都是final的。

工廠建構函式,沒有權利訪問this。

class

logger

; factory logger

(string name)

else

} logger.

_internal

(this

.name)

;void

log(string msg)

}main()

可能有一種需求,並不需要每次都建立新的類例項,而是每一種情況,只需要乙個例項。如上例,類中有乙個靜態快取_cache儲存著一些logger類例項,建立例項時,給工廠建構函式傳遞的name,如果在快取中已經存在,就用快取中現成的例項,如果沒有,就新建乙個例項,並且放到快取中。

這樣一來,可以建立名字為ui / sys / api 等的例項,然後在debug的時候,如果設定名字為ui的logger例項的mute為true,就不會列印ui相關的log,而不影響其它兩個名字的log。

如果類繼承了父類,那麼子類的建構函式一定要呼叫父類的建構函式,分兩種情況:

建構函式分成好幾部分來初始化成員變數,呼叫的順序如下:

初始化列表 -> 父類的無引數建構函式 -> 子類的無引數建構函式

如果父類沒有無引數建構函式,或者dart這種隱式呼叫無法滿足你的要求,那就需要顯式呼叫父類的建構函式。

顯式呼叫父類建構函式,應該在初始化列表中完成。

class

person

}class

employee

extends

person

}main()

);// prints:

// in person

// in employee

}

初始化列表就是建構函式名的冒號後面,打括號前面的部分。

初始化列表的執行順序,在整個建構函式的最前面,它除了可以呼叫父類的建構函式,還可以在建構函式方法體之前,初始化一些成員變數。

// initializer list sets instance variables before

// the constructor body runs.

point.

fromjson

(map

json)

: x = json[

'x']

, y = json[

'y']

初始化那些final修飾的成員變數時,初始化列表很有用,因為在方法體中,不能給final修飾的成員變數賦值,因為在執行方法體的時候,final修飾的成員變數已經不能變了。

class

point

傳遞建構函式,沒有方法體,在初始化列表中呼叫另乙個建構函式。

dart 學習 建構函式

dart 建構函式 classname 普通建構函式 普通建構函式 這就是我們普通的建構函式,其樣子和其它語言幾乎一樣 class point 上例中只有兩個成員變數,如果有10個,豈不是麻煩死?所以dart有語法糖給你哦 class point 它可以將x,y的賦值變得簡單一些,就不用寫建構函式的...

Dart關於繼承中建構函式一兩事

dart關於父類子類中建構函式的一些事情 dart中,類的過載是乙個小特點,不允許同名的建構函式。放到繼承中,一開始就出現點問題。比如如下 class animal animal.fromage int age void eating animal中,定義了無參建構函式,那麼帶引數建構函式,就只能用...

Dart 函式 函式引數 匿名函式

dart彙總這裡 main 函式 函式是一等物件 匿名函式 返回值dart 是一門真正物件導向的語言,甚至其中的函式也是物件,並且有它的型別 function 這也意味著函式可以被賦值給變數或者作為引數傳遞給其他函式。也可以把 dart 類的例項當做方法來呼叫。已下是函式實現的示例 bool isn...