dart类详细讲解

时间:2022-03-01 07:27:12
dart 是一个面向对象的语言;面向对象有 (1)继承  (2)封装   (3)多态
dart的所有东西都是对象,所有的对象都是继承与object类
一个类通常是由属性和方法组成的哈;
在dart中如果你要自定义一个类的话,将这个类放在main函数外面哈
类名使用大驼峰
方法名使用小驼峰

1 定义这个类的属性和方法

//定义一个类的属性和方法
class Person {
String name = '张三';
int age = 19;
void getInfo() {
// print('我叫$name,今年$age');第一种
//推荐使用这样的写,通过this去访问
print("${this.name}====${this.age}");
}
} //使用类中的属性和方法
void main() {
// 调用Perso这个类 首先需要实例化这个类
// Person p = new Person(); // 等价 var p=new Person
var p = new Person();
print(p.age);
p.getInfo();
}

2 改变类中的属性和方法

class Person {
String name = '张三';
int age = 19;
void getInfo() {
//推荐使用这样的写法
print("${this.name}====${this.age}");
}
//限制类型,更改类中的属性和方法
SetUserinfo(int age) {
this.age = age;
}
} void main() {
// 调用Perso这个类 首先需要实例化这个类
Person p = new Person(); // 等价 var p=new Person
print(p.age);//19
p.getInfo();//张三====19
p.SetUserinfo(100);
p.getInfo();//张三====100
}

3默认构造函数

class Person {
//这是一个默认构造函数
Person() {
print('默认构造函数里面的内容,该方法在实例化的时候会自动出发哈');
}
} void main() {
// 实例化的时候,会自动触发默认构造函数
Person p = new Person(); // 等价 var p=new Person
}

4 动态传递,类多次实例化,打印不同的值

class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
void getuserInfo() {
print(this.name);
print(this.age);
}
} void main() {
// 实例化的时候,会自动触发
Person p = new Person('张三', 10); // 等价 var p=new Person
p.getuserInfo(); //这个类可以实例化多次的哈
Person v = new Person('张三1', 100); // 等价 var p=new Person
v.getuserInfo();
}

5默认构造函数简写

class Person {
String name;
int age; // Person(String name, int age) {
// this.name = name;
// this.age = age;
// }
//上面注释的代码等价于 Person(this.name, this.age);
Person(this.name, this.age);
void getuserInfo() {
print(this.name);
print(this.age);
}
}

6命名构造函数,命名构造函数是可以写多个的;但是默认构造函数只能写一个

class Person {
//我是默认的构造函数
Person() {
print('我是默认的构造函数');
}
// 命名构造函数
Person.mynow() {
print('我是命名构造函数');
}
} void main() {
// 实例化的时候,会默认构造自动触发
Person p = new Person(); // 等价 var p=new Person
Person v = new Person.mynow(); // 触发命名构造函数
}

7将类抽离出去,单独放一个文件夹中

在项目的根目录创建一个文件夹 lib
在lib文件夹中创建一个文件 xxx.dart内容如下 class Person {
//我是默认的构造函数
Person() {
print('我是默认的构造函数');
}
// 命名构造函数
Person.mynow() {
print('我是命名构造函数');
}
} 在需要的某个文件中引入
import 'lib/xxx.dart';
void main() {
// 实例化的时候,会默认构造自动触发
Person p = new Person(); // 等价 var p=new Person
Person v = new Person.mynow(); // 触发命名构造函数
}

8dart修饰符

dart和其他面向对象的语言不一样。没有向public  private 这样的访问修饰符
但是我们可以使用_把一个属性或者方法定义成私有的哈;
(就是在变量或者方法的前面添加_;并且要单独把他抽离出去变成一个文件 放在lib目录下,这样外面就不能够访问了);
但是个人觉得这种没有实质的意义
如果要访问这个私有的方法,那么在类种添加一个共有的方法;去访问这个私有的方法;访问在return回去;
就可以访问这个私有的方法了
私有方法,只有在当前类中访问哈 在lib目录下的animal.dart文件;内容如下 class Animal {
String _name = 'dog';//这是私有的方法,只当前这个类可以访问;其他类是不能够访问的哈~;
// 如果非要访问这个类,可以通过共有方法来访问 // 通过公共方法来访问这个类;间接访问
getName(){
print(this._name);
} int age = 19;
void getInfo() {
//推荐使用这样的写法
print("${this._name}====${this.age}");
} //限制类型,更改类中的属性和方法
SetUserinfo(int age) {
this.age = age;
}
}

9 计算矩形的面积将他改为get方法

class Rect {
num width;
num height;
Rect(this.width, this.height);
getUserINfo() {
return (this.width * this.height);
}
} void main() {
// 实例化的时候,会默认构造自动触发
Rect p = new Rect(10, 4); // 等价 var p=new Person
print(p.getUserINfo());
} 将上面的代码改为get方法 class Rect {
num width;
num height;
Rect(this.width, this.height);
// getUserINfo() {
// return (this.width * this.height);
// } // 将上面的代码该为get
get getUserINfo {
return (this.width * this.height);
}
} void main() {
// 实例化的时候,会默认构造自动触发
Rect p = new Rect(10, 4);
// print(p.getUserINfo());
// 将上面的代码改为get方法的调用
print(p.getUserINfo);//调用的时候直接通过访问属性的方式访问方法
}

09dart 中的set 方法

class Rect {
num width;
num height;
Rect(this.width, this.height);
// 设置值的时候。我们使用了set方法
set areaHeight(value) {
this.height = value;
}
get area {
return this.height;
}
}
void main() {
// 实例化的时候,会默认构造自动触发
Rect p = new Rect(10, 4);
p.areaHeight = 6; //当一个类的内部使用了set方法的时候。我们直接使用赋值;
print(p.area); //内部使用了get 我们这直接通过属性获取值
}

10在实例化之前,给类内部初始化数值

class Rect {
num width;
num height;
// 在实例化之前,给类内部初始化数值
Rect()
: height = 2,
width = 10 {}
get area {
return this.height * this.width;
}
} void main() {
// 实例化的时候,会默认构造自动触发
Rect p = new Rect();
print(p.area); //内部使用了get 我们这直接通过属性获取值
}

dart类详细讲解的更多相关文章

  1. Siki_Unity_2-1_API常用方法和类详细讲解(下)

    Unity 2-1 API常用方法和类详细讲解(下) 任务101&102:射线检测 射线origin + direction:射线检测:射线是否碰撞到物体 (物体需要有碰撞器),碰撞物体的信息 ...

  2. Siki_Unity_2-1_API常用方法和类详细讲解(上)

    Unity 2-1 API常用方法和类详细讲解(上) 任务1&2:课程前言.学习方法 && 开发环境.查API文档 API: Application Programming I ...

  3. [VC++]用CTime类得到当前日期、时间、星期,格式化(详细讲解)

    用CTime类得到当前日期.时间.星期,格式化(详细讲解)2009/05/12 09:48 A.M.① 定义一个CTime类对象 CTime time; ② 得到当前时间 time = CTime:: ...

  4. 第四节:详细讲解Java中的类和面向对象思想

    前言 大家好,给大家带来详细讲解Java中的类和面向对象思想的概述,希望你们喜欢 类和面向对象 在Java中怎样理解对象,创建对象和引用:什么是引用,对于基础学习的同学,要深入了解引用.示例:Stri ...

  5. 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架

    前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...

  6. 05-- C++ 类的静态成员详细讲解

     C++ 类的静态成员详细讲解    在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不 ...

  7. 详细讲解nodejs中使用socket的私聊的方式

    详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...

  8. Android webservice的用法详细讲解

    Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...

  9. 详细讲解Android对自己的应用代码进行混淆加密防止反编译

    1.查看项目中有没有proguard.cfg. 2.如果没有那就看看这个文件中写的什么吧,看完后将他复制到你的项目中. -optimizationpasses 5 -dontusemixedcasec ...

随机推荐

  1. mysql权限与安全

    一.MySQL权限系统通过两个阶段进行认证: (A) 对用户进行身份认证,IP地址和用户名联合, (B) 对合法用户赋予相应权限,权限表在数据库启动的时候载入内存中. 二.在权限的存取过程中,会用到& ...

  2. iOS系统自带正则表达式简单运用

    //组装一个字符串,把里面的网址解析出来 NSString *urlString = @"sfdshttp://www.baidu.com"; NSError *error; // ...

  3. BZOJ 1556 墓地秘密

    2333333333333333333333333333333333333333333333 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 辣鸡出题人辣鸡出题人辣鸡出题人辣鸡出题人辣鸡 ...

  4. Object之克隆对象clone 和__clone()函数

    在前面的PHP面向对象之对象和引用,"$b=$a"的方式复制对象传递的是对象的地址,而不是传递对象的值(内容),我们可以通过克隆对象来实现对对象的内容和引用的复制 使用传址引用的方 ...

  5. JAVA程序猿怎么才干高速查找到学习资料?

    JAVA程序猿怎么才干高速查找到学习资料? JAVA学习资料在互联网上较为零散,并且大多是英文的.以下介绍3种方式,让程序猿能够高速地找到自己想要的资料. 一.导航站点: 有非常多类似hao123的站 ...

  6. 《linux内核完全剖析》笔记03-进程创建

    根据一下问题来看笔记 进程占多大的线形地址空间 进程实际分配多少物理内存 创建进程的开销在哪里 一. 从fork系统调用开始 kernel/sys_call.s第222行 _sys_fork: cal ...

  7. ubuntu16.04如何安装floodlight并且连接eclipse

    按顺序走,亲测没出错.用的是Luna R版本的eclipse https://floodlight.atlassian.net/wiki/spaces/floodlightcontroller/pag ...

  8. Python——字符串(python programming)

    p ython——字符串 ①加法 连接两个字符串 ②乘法  复制字符串 python——转义字符 \n 换行 \' 单引号 \'' 双引号 \\ 反斜杠 raw字符串:无视转义字符   转义: 字符串 ...

  9. rqnoj-329-刘翔!加油!-二维背包

    注意排除干扰项. 因为价值不会相等,所以价值的多少与本题没有任何关系,. 所以价值为干扰项,所以不用考虑. 二维背包,简单求解. #include<stdio.h> #include&lt ...

  10. bat 十进制转16进制

    @echo offset code=0123456789ABCDEF:enterset /p num=输入你要转换的十进制数字:echo %num%|findstr "[^0-9]&quot ...