-
????????????????????????????????????????閉包
閉包是一個方法(對象)
閉包定義在其他方法內部
閉包能夠方位外部方法內的局部變量,并持有其狀態
查看全部 -
Map常用操作
查看全部 -
List常用操作
查看全部 -
泛型
1、Dart類型是可選的,可使用泛型限定類型
2、使用泛型能夠有效的減少代碼重復
3、類的泛型、方法的泛型
class?Utils<T>?{ ??T?element; ??void?putInt(T?element)?{ ????this.element?=?element; ??} }
void?main(List?args)?{ ??var?u=?new?Utils(); ??u.put<String>("ssdas"); ??u.put<int>(11); } class?Utils?{ ?void?put<T>?(T?e)?{ ???print(e); ?} }
查看全部 -
枚舉
1、是一種有窮序列集的數據類型
2、使用關鍵字enum定義一個枚舉
3、常用于代替常量,控制語句等
dart枚舉特性
1、index從0開始,依次累加
2、不能指定原始值
3、不能添加方法
查看全部 -
class?Person?{ ???int?age; ???Person(this.age); ???bool?operator?>?(Person?person)?{ ?????return?this.age?>?person.age; ???} ???int?operator?[]?(String?str)?{ ?????if?(str?==?"age")?{ ???????return?this.age; ?????} ?????return?0; ???} ???@override ???bool?operator?==(Object?other)?=> ???????identical(this,?other)?|| ???????????other?is?Person?&& ???????????????runtimeType?==?other.runtimeType?&& ???????????????age?==?other.age; ???@override ???int?get?hashCode?=>?age.hashCode; }
查看全部 -
對象操作符覆寫
1、覆寫操作符需要在類中定義
返回類型 operator 操作符 (參數1,參數2...){
實現體...
return 返回值;
}
2、如果覆寫==,還需要覆寫對象的hashCode getter方法,可以工具直接生成
查看全部 -
abstract?class?A?{ ??void?run(); } class?B?implements?A{ ??@override ??void?run()?{ ????//?TODO:?implement?run ????print("b...A"); ??} } class?C?implements?A{ ??@override ??void?run()?{ ????//?TODO:?implement?run ????print("c...A"); ??} } class?E?{ ??String?name; ??void?run(){} } class?D?extends?E?with?B{ } class?DE?extends?E?with?C{ }
查看全部 -
Mixins
1、Mixins類似于多繼承,是在多類繼承中重用一個類代碼的方式
(注意:若多個類有重名的默認調用繼承最后一個類中的方法)
class?D?extends?A?with?B,C?{ }
2、作為Mixin的類不能有顯示聲明構造方法
3、作為Mixin的類只能繼承于Object,implements繼承的不影響
4、使用關鍵字with連接一個或多個mixin
class?D??extends?A?with?C,B?{ ??d()?{} }
查看全部 -
dart接口
1、類和接口是統一的,類就是接口
2、每個類都隱式的定義了一個包含所有實例成員的接口,抽象類也不另外
3、如果是復用已有類的實現,使用繼承extends
4、如果只是使用已有類的外在行為,使用接口implements,
查看全部 -
Dart 抽象類
1、抽象類使用abstract表示,不能直接被實例化
2、抽象方法不用abstract修飾,無實現
abstract?class?Person?{ void?run(); void?study()?{} }
3、抽象類可以沒有抽象方法
4、有抽象方法的類一定得聲明為抽象類
查看全部 -
繼承中的構造方法
1、子類的構造方法默認會調用父類的無名無參構造方法
2、如果父類沒有無名無參構造方法,則需要顯示調用父類構造方法
3、在構造方法參數后使用:顯示調用父類構造方法
構造方法執行順序
1、父類的構造方法在子類構造方法體開始執行的位置調用
2、如果有初始化列表,初始化列表會在父類構造方法之前執行
class?Student?extends?Person?{ ??int?age; ??final?String?gender; ??Student(String?name,String?g)?:?gender?=?g?,?super.withName(name); }
查看全部 -
Dart繼承
使用關鍵字extends繼承一個類
子類會繼承父類可見的屬性和方法,不會繼承構造方法
子類能夠復寫父類的方法,getter和setter
單繼承,多態性
import?'Person.dart'; void?main(List?args)?{ //??var?student?=?new?Student(); //??student.study(); //??student.name?=?"Tome"; //??student.age?=?15; //??print(student.isAudit); //??student.run(); Person?person?=?new?Student(); //(person?as?Student).study(); if?(person?is?Student)?{ ??person.study(); } print(person); } class?Student?extends?Person{ ??void?study()?{ ????print("student?study..."); ??} ??@override ??//?TODO:?implement?isAudit ??bool?get?isAudit?=>?age?>?15; ??@override ??void?run()?{ ????print("student?run?..."); ??} }
查看全部 -
對象call方法
dart中方法可以作為對象操作,對象也可以作為方法使用
1、如果類實現了call()方法,則該類的對象可以作為方法使用
class?Person?{ ??String?name; ??int?age; //只需要方法名為call就行 ????call(String?name,?int?age)?{ ????return?"work?...$name.?age?is?$age"; ??} }
查看全部 -
對象操作符
條件成員訪問: ?.
var?person?=?new?Person(); person?.work();
對成員是否為空進行判斷
類型轉換as
var?person; person?=?""; person?=?new?Person(); (person?as?Person).work();
是否指定類型:is, is!
??var?person; ??person?=?""; ??person?=?new?Person(); //??(person?as?Person).work(); if?(person?is?Person)?{ ??person.work(); }
級聯操作:..
var?person?=?new?Person(); person..name?=?"Tome" ..age?=?20..work();
查看全部
舉報