Flutter

Dart面向对象编程一

2019-04-11  本文已影响0人  RobinZhao

Dart是面向对象的语言,第一部分主要内容:

属性和方法

计算属性

void test() {
  var rect = Rectangle();
  rect.width = 10;
  rect.height = 20;
  print(rect.area);
  
  rect.area = 200;
  print(rect.width);
}

class Rectangle {
  num width, height;
  num get area => width * height; // 计算属性,得到值
  set area(value) { // 计算属性 ,设置值
    width = value / (height ?? 1);
  }
}

构造方法

命名构造方法

void test() {
  var person = Person('Tom', 20);
  var person1 = Person.withName("Robin");
  Person.withAge(20);
}
// 构造方法
class Person {
  String name;
  int age;
  final String gender = '';
  // Person() {} // 默认构造方法,可以省略
  // Person(String name,int age){
  //   this.name = name;
  //   this.age = age;
  // }
  // 上面构造方法和下面的等价,Dart的语法糖的形式 语法糖构造方法是在构造方法之前就已经给属性赋值了
  Person(this.name,this.age);
  Person.withName(String name) {
    this.name = name;
  }
  // 上面构造方法也可以用语法糖
  Person.withAge(this.age);
  void work() {
    print('work...');
  }
}

常量构造方法 -在开发中更快,因为在编译的时候就已经确定了

void ptest() {
  const person = Person('Robin', 18, 'Male');
  /// 'age' can't be used as a setter because it is final
  person.age = 10;
}

class Person {
  final String name;
  final int age;
  final String gender;
  const Person(this.name,this.age,this.gender);
  void work() {
    print('work...');
  }
}

工厂构造方法

// 官网例子
class Logger {
  final String name;
  static final Map<String,Logger> _cache = <String,Logger>{};
  factory Logger(String name) {
    if (_cache.containsKey(name)) {
      return _cache[name];
    } else {
      final logger = Logger._internal(name);
      _cache[name] = logger;
      return logger;
    }
  }
  Logger._internal(this.name);
  // Logger._internal(this.name){
    // return Text('data'); // 非工厂构造方法是不可以返回对象的 tips:Constructors can't return values.
  // }
  void log(String msg) {
    print(msg);
  }
}

初始化列表

class Person2 {
  String name;
  int age;
  final String gender;
  Person2(this.name,this.age,this.gender);
  /// 初始化列表
  Person2.withMap(Map map):gender = map['gender'] {
    print('$name $age $gender ...'); // null null Fmale ...
    name = map['name'];
    age = map['age'];
  }
  void work() {
    print('$name $age $gender work...'); // Tom 19 Fmale work...
  }
}

静态成员

class Page {
  static int currentPage = 1;
  // 下滑
  static void scrollDown() {
    currentPage = 1;
    print('ScrollDown...');
  }
  void scrollUp() {
    currentPage++;
    print('ScrollUp...');
  }
}

对象操作符

Person类:

class Person {
  String name;
  int age;
  void work() {
    print('$name $age work...');
  }
}

对象call方法

上一篇 下一篇

猜你喜欢

热点阅读