资讯动态

Day11 | Dart闭包原理与面向对象类的实战详解

发布时间:2026/8/22 21:07:03 来源:尧图企业网站定制
文章目录一、函数1、闭包二、类1、自定义类2、类的构造函数2.1 默认构造函数2.2 命名构造函数一、函数1、闭包全局变量的特点全局变量常驻内存全局变量污染全局局部变量的特点不常驻内存会被垃圾机制回收不会污染全局功能需求常驻内存不污染全局产生了闭包闭包可以解决这个问题…**闭包**函数嵌套函数内部函数会调用外部函数的变量或参数变量或参数不会被系统回收不会释放内存**闭包的写法**函数嵌套函数并 return 里面的函数。全局变量// 全局变量vara123;voidmain(){print(a);// 123fn(){a;print(a);}fn();// 124fn();// 125fn();// 126}局部变量voidmain(){printInfo(){// 局部变量varmyNum123;myNum;print(myNum);}printInfo();// 124printInfo();// 124printInfo();// 124}闭包// 闭包voidmain(){fn(){vara123;return(){a;print(a);};}varbfn();b();// 124b();// 125b();// 126}二、类Dart 是一门面向对象的编程语言面向对象编程OOP的三个基本特征封装、继承、多态封装是 对象 和 类 概念的主要特性。继承OOP 语言的一个主要功能。多态允许将子类类型的指针赋值给父类类型的指针。Dart 中所有的东西都是对象所有的对象继承自 Object 类。Dart 是一门使用类和单继承的面向对象的语言所有的对象都是类的实例并且所有的类都是 Object 的子类。一个类通常都是由属性和方法组成。List 和 Map 等就是系统内置的类MapmyMapnewMap();myMap[username]Cherry;myMap.addAll({age:16});myMap.isEmpty;1、自定义类定义一个 Person 类类的名字首字母必须大写遵循大驼峰命名classPerson{// 属性StringnameCherry;int age16;// 方法voidgetInfo(){// 类的方法中访问属性// print($name---$age); // 直接使用print(${this.name}---${this.age});// 推荐使用 this 获取}}在main()中使用类voidmain(){// 实例化varp1newPerson();print(p1.name);p1.getInfo();}实例化时指定当前实例的类型voidmain(){// 实例化Personp1newPerson();print(p1.name);p1.getInfo();}通过方法操作属性类的属性和方法都可以有多个class Person { // 属性 String name Cherry; int age 16; // 方法 void getInfo() { // 类的方法中访问属性 // print($name---$age); // 直接使用 print(${this.name}---${this.age}); // 推荐使用 this 获取 } void setInfo(int age) { this.age age; } }voidmain(){// 实例化Personp1newPerson();p1.setInfo(18);p1.getInfo();}使用this关键字引用当前实例注意当且仅当命名冲突时使用this关键字才有意义否则会被 Dart 忽略。2、类的构造函数声明一个与类名一样的函数即可声明一个构造函数大部分的构造函数形式是生成式构造函数用于创建一个类的实例。2.1 默认构造函数如果没有声明构造函数Dart 会自动生成一个无参数的构造函数并且该构造函数会调用其父类的无参数构造方法。classPerson{StringnameCherry;int age16;// 默认构造函数Person(){print(默认构造函数在实例化的时候触发);}voidprintInfo(){print(${this.name}---${this.age});}}voidmain(){Personp1newPerson();}当实例化对象的时候会自动调用的函数构造函数的名称和类的名称相同在一个类中默认构造函数只能有一个。实例化对象的时候动态传入属性的值classPerson{// 不初始化属性值varname;varage;Person(Stringname,int age){// 构造函数中赋值// print(默认构造函数在实例化的时候触发);this.namename;this.ageage;}voidprintInfo(){print(${this.name}---${this.age});}}voidmain(){Personp1newPerson(Cherry,16);p1.printInfo();Personp2newPerson(严泽光,88);p2.printInfo();Personp3newPerson(胡钧,96);p3.printInfo();}最新版本的 Dart 中需要初始化不可为 null 的实例字段如果不初始化的话要在属性前面加上 lateclassPerson{// 不初始化属性值lateStringname;late int age;......}默认构造函数简写classPerson{// 不初始化属性值lateStringname;late int age;// Person(String name, int age) {// // 构造函数中赋值// // print(默认构造函数在实例化的时候触发);// this.name name;// this.age age;// }// 简写Person(Stringname,int age);voidprintInfo(){print(${this.name}---${this.age});}}2.2 命名构造函数

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价