在Dart语言中,字段(Field)是类中用于存储数据的成员变量
在Dart语言中,字段(Field)是类中用于存储数据的成员变量。字段可以是实例变量(与类的实例相关联)或静态变量(与类本身相关联)。Dart的字段可以具有访问修饰符,以控制它们在类内外的可见性和可访问性。
字段的基本概念
实例变量:每个对象都有自己的实例变量副本。它们在对象创建时初始化,并在对象销毁时销毁。
静态变量:静态变量与类本身相关联,而不是与类的实例相关联。所有实例共享同一个静态变量。
访问修饰符:
public:默认情况下,字段公共的,可以在类的外部访问。
private:在字段名前加下划线_,使其成为私有字段,只能在定义它的库中访问。
字段的声明和初始化
字段可以在类中直接声明和初始化。Dart支持在声明时初始化字段,也可以在构造函数中进行初始化。
示例代码
dart
class Person
// 公共实例变量
String name;
// 私有实例变量
int _age;
// 静态变量
static int count = 0;
// 构造函数
Person(this.name, this._age) {
count++; // 每次创建实例时,计数器增加
}
// 方法
void introduce() {
print('Hello, my name is $name and I am $_age years old.');
}
}
void main() {
var person = Person('Alice', 25);
person.introduce(); // 输出: Hello, my name is Alice and I am 25 years old.
print('Total persons: ${Person.count}'); // 输出: Total persons: 1
}
字段的访问控制
公共字段:可以直接在类外部访问。
dart
print(person.name); // 输出: Alice
私有字段:只能在定义它的库中访问。
dart
// print(person._age); // 错误:无法在库外部访问私有字段
静态字段:通过类名访问。
dart
print(Person.count); // 输出: 1
字段的封装
Dart中通常使用getter和setter方法来封装字段,以提供对字段的受控访问。这在需要验证或计算字段值时特别有用。
示例代码
dart
class Rectangle {
double _width;
double _height;
Rectangle(this._width, this._height);
// Getter for width
double get width => _width;
// Setter for width
set width(double value) {
if (value <= 0) {
throw ArgumentError('Width must be positive');
}
_width = value;
}
// Getter for height
double get height => _height;
// Setter for height
set height(double value) {
if (value <= 0) {
throw ArgumentError('Height must be positive');
}
_height = value;
}
double get area => _width * _height;
}
void main() {
var rect = Rectangle(10, 20);
print('Area: ${rect.area}'); // 输出: Area: 200
rect.width = 30; // 使用setter
print('New width: ${rect.width}'); // 输出: New width: 30
}
通过使用getter和setter,可以更好地控制对字段的访问和修改,确保数据的完整性和安全性。