Dart的类
一起从0开始学习Flutter!
在我们一开始创建了第一个项目的时候已经大概看了一眼Dart中的类的样子,接下来我们需要好好研究一下它,首先先写一个朴素的类:
class Person{
String name;
}
这是一个单纯的类的构成,构造方法为隐藏的,属性只有一个name属性。在Dart中只能有个构造方法,构造方法中可以使用可选参数的方式来实现原来我们有多个构造函数的需求,当然也有其他的方式我们一起看下:
void main() {
var hanMeimei = Person(name:"HanMeimei",sex:"female");//使用带有参数的构造方法创建一个韩梅梅
var liLei = Person.withName("LiLei");//使用只传名字的方式创建一个李雷
print(hanMeimei);//通过重写了Object的toString方法来打印了韩梅梅的信息
print(liLei);//通过重写了Object的toString方法来打印了李雷的信息
}
class Person{
String name;
String sex;
int age;
//有参数的构造方法
Person({String name,String sex,int age = 15}){//参数可以是用可选参数的形式,解决了需要传不同参数的问题
this.name = name;
this.sex = sex;
this.age = age;
}
// Person({this.name,this.sex,this.age = 15}); 这是对上面有参数的构造方法的简写,这也是以后要写的形式
//创建一个只需要传入Name的构造方法
Person.withName(String name){
this.name = name;
}
@override
toString(){
return "name is $name,sex is $sex age is $age";
}
}
在上面的例子中我们使用修改toString的方式来打印出了想要的信息,还有没有其他的方式呢,是有的,在Dart中我们可以实现call()函数来让对象作为方法去使用。在上面的代码中添加:
void call(){
print("name is ${this.name},sex is ${this.sex} age is ${this.age}");
}
在main中添加下面的代码,可以看到直接得到了打印结果,当然call方法也是可以添加参数的,可以自己试一下。
hanMeimei();//name is HanMeimei,sex is female age is 15
liLei();//name is LiLei,sex is null age is null
在Dart里类里的属性是在该library可见的,也就是我们在类中的私有属性是可以在该dart文件中都可以正常访问的,可以通过修改get,set方法来访问私有属性,属性也需要注意不要保存可以通过计算获得的属性。我们新建一个rect.dart文件来看一下私有属性和计算属性。
class Rect{
num _width;
num _height;
//计算属性,不需要存储
num get area => _width*_height;
set area(num value){
_width = value/10;
}
num get width => _width;//无法直接访问私有属性_width,需要通过get方法获取
set width(num value) => _width = value;//无法直接设置_width的值,需要通过set方法设置
num get height => _height;//无法直接访问私有属性_height,需要通过get方法获取
set height(num value) => _height = value;//无法直接设置_heigh的值,需要通过set方法设置
}
在main函数的dart文件中引入该library
import 'rect.dart';
然后在main中调用该Rect类,发现无法直接通过对象使用属性,只能通过set方法,获取到area属性跟别的属性一样的方式,然而我们并没有在rect.dart中单独去定义area属性。
var rect = Rect();
rect.height = 10;
rect.width = 5;
print(rect.area);//50
Dart中的类的基本使用和类中属性的介绍就算是结束了,可以看到和我们其他语言有很多共通之处,只是在写法上需要多注意一些细节。