构造函数是创建类实例的重要部分。在 Dart 中,构造函数是一种特殊的方法,用于初始化对象的状态。一个类可以有多个构造函数,但至少有一个默认的构造函数。当构造函数的名字和类名相同时,我们称其为命名构造函数。
默认构造函数
每个类都有一个默认构造函数,如果没有显式定义任何其他构造函数。默认构造函数没有参数。以下是一个简单的示例:
// www.javascriptcn.com code example
class Person {
String name;
int age;
// 默认构造函数
Person() {
name = "John Doe";
age = 30;
}
}
void main() {
var person = Person();
print(person.name); // 输出: John Doe
print(person.age); // 输出: 30
}在这个例子中,Person 类有一个默认构造函数,它初始化了 name 和 age 属性。
与类名相同的构造函数
与类名相同的构造函数是一种特殊的构造函数,它允许我们使用与类名相同的名称来创建类的实例。这使得代码更具可读性和简洁性。这种构造函数通常用于执行一些基本的初始化操作。
基本示例
让我们通过一个具体的例子来看看如何定义和使用与类名相同的构造函数:
// www.javascriptcn.com code example
class Point {
double x, y;
// 与类名相同的构造函数
Point(this.x, this.y);
void show() {
print('Point ($x, $y)');
}
}
void main() {
var point = Point(10.5, 20.5);
point.show(); // 输出: Point (10.5, 20.5)
}在这个例子中,Point 类定义了一个与类名相同的构造函数,用于接收 x 和 y 参数,并初始化类的属性。
使用初始化列表
与类名相同的构造函数也可以使用初始化列表来简化初始化过程。初始化列表允许我们在构造函数体之前执行初始化操作。这在处理常量字段时特别有用。
// www.javascriptcn.com code example
class Rectangle {
final num left, top, width, height;
// 使用初始化列表的构造函数
Rectangle(this.left, this.top, this.width, this.height);
Rectangle.fromSize(num l, num t, Size size)
: left = l,
top = t,
width = size.width,
height = size.height;
void show() {
print('Rectangle($left, $top, $width, $height)');
}
}
void main() {
var rect = Rectangle(10, 20, 100, 200);
rect.show(); // 输出: Rectangle(10, 20, 100, 200)
var rectFromSize = Rectangle.fromSize(50, 60, new Size(150, 250));
rectFromSize.show(); // 输出: Rectangle(50, 60, 150, 250)
}在这个例子中,Rectangle 类定义了两个构造函数:一个普通的构造函数和一个带有初始化列表的构造函数。第二个构造函数接受一个 Size 对象作为参数,并使用初始化列表来初始化 width 和 height 字段。
带有默认值的构造函数
有时候,我们希望构造函数中的某些参数具有默认值。这可以通过在构造函数参数中提供默认值来实现。默认值可以在构造函数内部设置,也可以直接在构造函数签名中设置。
// www.javascriptcn.com code example
class Circle {
final double radius;
final String color;
// 带有默认值的构造函数
Circle(this.radius, {this.color = 'black'});
void show() {
print('Circle(radius: $radius, color: $color)');
}
}
void main() {
var circle = Circle(5.0);
circle.show(); // 输出: Circle(radius: 5.0, color: black)
var coloredCircle = Circle(7.0, color: 'red');
coloredCircle.show(); // 输出: Circle(radius: 7.0, color: red)
}在这个例子中,Circle 类定义了一个带有默认值的构造函数。color 参数有一个默认值 'black',这意味着如果我们不提供 color 参数,对象将被创建为黑色。
总结
与类名相同的构造函数是 Dart 中一种非常方便的初始化类实例的方式。通过这种方式,我们可以更简洁地初始化对象的属性,还可以使用初始化列表来简化复杂的初始化过程。此外,通过提供默认值,我们可以使构造函数更加灵活,从而满足不同的需求。
通过这些示例,你应该能够理解如何在 Dart 中使用与类名相同的构造函数,并将其应用于实际项目中。