美文网首页
dart的构造函数

dart的构造函数

作者: 凯司机 | 来源:发表于2021-07-16 08:44 被阅读0次
    main(List<String> args) {
      var p = Person('ksj', 29);
      var p1 = Person.withNameAgeAndHeight('ksj', 22, 178);
      print(p1.toString());
      
      // 父类应用指向子类对象
      // Object obj = 'ksj';
      // 会报错的写法
      // print(obj.substring(1));
    
      /* dynamic 和 Object 的区别:
        Object编译时报错、dynamic编译时不报错,但是运行时存在潜在风险
        需要增加类型判断
      */
    
      dynamic obj = 'ksj';
      print(obj.substring(1));
      var p2 = Person.form({
        "name1" : "1",
        "name2" : "2",
        "name3" : "3",
      });
    }
    
    
    class Person {
      String name;
      int age;
      double height;
      // Dart提供给我们的语法糖
      Person(this.name, this.age);
      // Dart里面没有重载
      // 命名构造函数
    
      Person.withNameAgeAndHeight(this.name, this.age, this.height);
      Person.form(Map<String, dynamic> mapst);
    
      // 重写类的方法进行覆盖
      @override
      String toString() {
        // TODO: implement toString
        return "$name $age $height";
      }
    }
    
    class Person {
      final String name;
      final int age;
      // 如果初始化不赋值,以后再也不能赋值了
      // C++里面就有这样的语法
      // 默认值的传入
      // 源码中特别喜欢用这种方法——初始化列表
      // 作用,如果创建对象时,有传入一个age,那么就使用传入的阿哥,如果没有传入age,那么使用一个默认值
    
      Person(this.name, {int age}): this.age = age ?? 10 {
        // 大括号里面的代码执行的时候,代码就被初始化了
        // this.age = age;
      }
    
      const temp = 20;
      Person(this.name, {int age}): this.age = temp > 20 ? 30 : 50  {
        // 大括号里面的代码执行的时候,代码就被初始化了
        // this.age = age;
      }
    
      
      // 上面是官方推荐,
      Person(this.name, {this.age = 10});
      Person(this.name, {this.age = temp  ?? 30 });
      
      // 局限性:下面局限性只能做确定的值赋值操作,不能做三目运算等不确定的操作
    
      // 保留着
    
      // 默认值里面只能给具体值,不能给函数调用
    
      // 解除疑惑:
    
    }
    

    相关文章

      网友评论

          本文标题:dart的构造函数

          本文链接:https://www.haomeiwen.com/subject/dndkultx.html