Dark 类与对象
1 类的声明
- 使用class声明一个类
- 使用new 创建一个对象,new可省略
- dark文件名和声明的类名可以不一样,与java不同
void main() { var function = Person(); var function1 = new Person(); function.name; } class Person { String name; }
2 属性与方法
-
属性默认生成getter和setter,通过.访问
-
方法不能重载
3 类及成员可见性
-
dark中的可见性以library(库)为单位
-
默认情况下,一个dark文件就是一个库
-
使用_ 表示库中类及成员的私有性,只能在当前库中访问类。也可以用_表示私有属性。
-
使用import导入库
4 定义一个类和私有属性
void main() { Person person = Person(); } class Person { String _weight; }
在其他库中import库,访问不了私有属性 _weight
5 计算属性 get关键字
void main() { Person person = Person(); person.salary = 3000; person.month = 12; print(person.yearSalary); } class Person { String weight; int salary; int month; //计算属性 num get yearSalary => (salary * month); }
6 构造方法
-
存在默认的构造方法
-
如果自定义构造方法,则默认构造方法无效
-
语法糖形式定义构造方法,并给属性赋值
-
构造方法不能重载
命名构造方法
可以定义多个构造方法,使用类名.方法的形式实现
class Person { int salary; int month; Person(this.salary,this.month);//构造方法并赋值 Person.withSalary(this.salary);//命名构造方法 num get yearSalary => (salary * month);//计算属性 }
7 工厂构造方法
class Fruit { final String name; static final Map<String, Fruit> _cache = <String, Fruit>{}; //工厂构造方法,返回一个对象 factory Fruit(String name) { if (_cache.containsKey(name)) { return _cache[name]; } else { final fruit = Fruit._internal(name); _cache[name] = fruit; return fruit; } } Fruit._internal(this.name); //私有构造 }
8 静态成员
- 使用static关键字实现类级别的变量和函数
- 类中的常量需要使用static const声明
9 对象操作符
-
条件成员访问 ?. 如果对象或者属性为空,则不调用对象或者属性
-
类型转换 as
-
是否指定类型 is is! (类似java instance of )
-
级联操作.. (类似java build模式 返回当前对象 )
void main() { Person person = Person(); if(person is Person){ person..age = 10 ..salary = 100; person?.work(); } } class Person { int age; int salary; work() { print("work..."); } }