20用d编程结构
结构是值类型
,直接复制.可有默认值.如果未初化,则成员自动用该类型的默认值.
struct TimeOfDay {
int hour;
int minute;
}
//定义
auto periodStart = TimeOfDay(8, 30);
auto periodDuration = TimeOfDay(1, 15);
immutable periodStart = TimeOfDay(8, 30);
immutable periodDuration = TimeOfDay(1, 15);
//不变,动,枚,都具有自动推导的能力.
import std.math;
struct Test {
char c;
int i;
double d;
}
//可一次初化0~3个,因为每种类型都默认初化.有默认初化值
struct Test {
char c = 'A';
int i = 11;
double d = 0.25;
}//还可以这样,
可以这样:
TimeOfDay periodStart = { 8, 30 };
//比c++多了一个`=`号,这是类`c`风格.
也可以这样:
TimeOfDay t = { minute: 42, hour: 7 };
auto yourLunchTime = TimeOfDay(12, 0);
auto myLunchTime = yourLunchTime;
//按值复制
小心,按值复制过程中,有些成员是钥匙.复制过去的仍然是钥匙,而不是实体.如
struct Student {
int number;
int[] grades;//切片
}
auto student1 = Student(1, [ 70, 90, 85 ]);
auto student2 = student1;//复制
student2.number = 2;//第一个是实体
student1.grades[0] += 5;//实体在修改
writeln(student2.grades[0]);//可见,在钥匙眼里,已经变了.要小心.
auto student2 = Student(2, student1.grades.dup);//这样,复制了个新实体.
student1.grades[0] += 5;
writeln(student2.grades[0]);
静态成员可在static this()
中初化,在static ~this()
中析构
import std.file;
struct Point {
enum nextIdFile = "Point_next_id_file";
static this() {//线程开始时初化 静态
if (exists(nextIdFile)) {
auto file = File(nextIdFile, "r");
file.readf(" %s", &nextId);
}
}
static ~this() {
auto file = File(nextIdFile, "w");
file.writeln(nextId);
}//在此析构
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现