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...");
  }
}

 

posted @ 2019-06-10 23:10  随易来了  阅读(467)  评论(0编辑  收藏  举报