- D 编程基础
- D 编程 - 首页
- D 编程 - 概述
- D 编程 - 环境
- D 编程 - 基本语法
- D 编程 - 变量
- D 编程 - 数据类型
- D 编程 - 枚举
- D 编程 - 字面量
- D 编程 - 运算符
- D 编程 - 循环
- D 编程 - 条件语句
- D 编程 - 函数
- D 编程 - 字符
- D 编程 - 字符串
- D 编程 - 数组
- D 编程 - 关联数组
- D 编程 - 指针
- D 编程 - 元组
- D 编程 - 结构体
- D 编程 - 联合体
- D 编程 - 范围
- D 编程 - 别名
- D 编程 - 混入
- D 编程 - 模块
- D 编程 - 模板
- D 编程 - 不可变
- D 编程 - 文件 I/O
- D 编程 - 并发
- D 编程 - 异常处理
- D 编程 - 合约
- D - 条件编译
- D 编程 - 面向对象
- D 编程 - 类与对象
- D 编程 - 继承
- D 编程 - 重载
- D 编程 - 封装
- D 编程 - 接口
- D 编程 - 抽象类
- D 编程 - 有用资源
- D 编程 - 快速指南
- D 编程 - 有用资源
- D 编程 - 讨论
D 编程 - 别名
别名,顾名思义,为现有名称提供替代名称。别名的语法如下所示。
alias new_name = existing_name;
以下为旧语法,以防您参考一些旧格式示例。强烈建议不要使用此语法。
alias existing_name new_name;
还有一种与表达式一起使用的语法,如下所示,其中我们可以直接使用别名代替表达式。
alias expression alias_name ;
如您所知,typedef 可添加创建新类型的能力。别名可以完成 typedef 的工作,甚至更多。下面显示了一个使用别名的简单示例,它使用 std.conv 头文件,该头文件提供类型转换功能。
import std.stdio; import std.conv:to; alias to!(string) toString; void main() { int a = 10; string s = "Test"~toString(a); writeln(s); }
编译并执行上述代码后,将产生以下结果:
Test10
在上面的示例中,我们没有使用 to!string(a),而是将其分配给别名 toString,使其更方便且更容易理解。
元组的别名
让我们看另一个示例,在该示例中,我们可以为元组设置别名。
import std.stdio; import std.typetuple; alias TypeTuple!(int, long) TL; void method1(TL tl) { writeln(tl[0],"\t", tl[1] ); } void main() { method1(5, 6L); }
编译并执行上述代码后,将产生以下结果:
5 6
在上面的示例中,类型 tuple 被分配给别名变量,它简化了方法定义和变量访问。当我们尝试重用此类类型元组时,这种访问方式更加有用。
数据类型的别名
很多时候,我们可能会定义需要在整个应用程序中使用的通用数据类型。当多个程序员编写应用程序时,可能会出现一个人使用 int,另一个人使用 double 等等的情况。为了避免此类冲突,我们通常使用类型来表示数据类型。下面显示了一个简单的示例。
示例
import std.stdio; alias int myAppNumber; alias string myAppString; void main() { myAppNumber i = 10; myAppString s = "TestString"; writeln(i,s); }
编译并执行上述代码后,将产生以下结果:
10TestString
类变量的别名
通常需要在子类中访问超类的成员变量,这可以通过别名实现,可能使用不同的名称。
如果您不熟悉类和继承的概念,请先查看有关类和继承的教程,然后再开始学习本节内容。
示例
下面显示了一个简单的示例。
import std.stdio; class Shape { int area; } class Square : Shape { string name() const @property { return "Square"; } alias Shape.area squareArea; } void main() { auto square = new Square; square.squareArea = 42; writeln(square.name); writeln(square.squareArea); }
编译并执行上述代码后,将产生以下结果:
Square 42
别名 this
别名 this 提供了自动转换用户定义类型的能力。语法如下所示,其中关键字 alias 和 this 分别写在成员变量或成员函数的两侧。
alias member_variable_or_member_function this;
示例
下面显示了一个示例,以展示别名 this 的强大功能。
import std.stdio; struct Rectangle { long length; long breadth; double value() const @property { return cast(double) length * breadth; } alias value this; } double volume(double rectangle, double height) { return rectangle * height; } void main() { auto rectangle = Rectangle(2, 3); writeln(volume(rectangle, 5)); }
在上面的示例中,您可以看到结构体 rectangle 在别名 this 方法的帮助下被转换为 double 值。
编译并执行上述代码后,将产生以下结果:
30