基本内容概述:
类与对象:
计算属性:
void main(){ var rect = new Rectangle(); rect.width = 20; rect.height = 10; print(rect.area); } class Rectangle{ num width,height; /*num area(){ return width*height; }*/ //计算属性:返回值类型 get 计算属性名 /*num get area{ return width*height; }*/ //以上可以简写如下: num get area => width*height; }
打印结果:200
构造方法:
void main(){ var person = new Person('wwk', 90,'Female'); /*person.name = 'wwk'; person.age = 33;*/ //person.work(); } class Person{ String name; int age; final String gender; /*Person(String name,int age){ this.name = name; this.age = age; }*/ //语法糖形式,语法糖和普通构造方法有区别 语法糖可以对final属性设置,因为它是在构造方法执行之前对属性赋值 Person(this.name,this.age,this.gender){ print(name); } void work(){ print('name is $name,age is $age, gender is $gender working...'); } }
因为构造方法不能被重载,如果要实现多个构造方法要使用命名构造方法。
常量构造方法:
void main(){ //const person = const Person('wwk', 90,'Female'); //const 可以省略 const person = Person('wwk', 90,'Female'); person.work(); } class Person{ final String name; final int age; final String gender; const Person(this.name,this.age,this.gender); void work(){ print('name is $name,age is $age, gender is $gender working...'); } }
工厂构造方法:
工厂构造方法和其他构造方法最大的不同就是在工厂构造方法中可以返回对象。
class Logger{ final String name; static final Map<String, Logger> _cache = <String,Logger>{}; Logger._internal(this.name); factory Logger(String name){ if(_cache.containsKey(name)){ return _cache[name]; }else{ final logger = Logger._internal(name); _cache[name] = logger; return logger; } } void log(String msg){ print(msg); } }
初始化列表:
class Person{ String name; int age; final String gender; Person(this.name,this.age,this.gender); //初始化列表 Person.withMap(Map map):gender = map['gender']{ this.name = map['name']; this.age = map['age']; } //初始化列表也可以写成如下形式: Person.withMapnew(Map map):name = map['name'],age = map['age'],gender = map['gender']{ } }
静态成员:
对象操作符:
对象call方法:
总结: