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

在上面的例子,而不是使用!string(a),我们已经分配给它的别名的toString使其更方便和更容易理解,我们。

元组别名

让我们来看看另一个例子,我们可以为一个元组设置别名。

import std.stdio;
import std.typetuple;

alias TypeTuple!(int, long) TL;

void method1(TL tl)
{
   writeln(tl[0],"    ", tl[1] );
}

void main()
{
   method1(5, 6L);   
}

当上面的代码被编译并执行,它会产生结果如下:

5    6

在上面的示例中,类型的元组被分配给变量的别名,它简化了的方法的定义和变量的访问。当我们尝试重用这种类型的元组的这种访问是更加有用。

别名数据类型

很多时候,我们可以定义一个需要在整个应用程序中使用通用数据类型。当多个程序员编写一个应用程序,它可以是情况下,一个人使用整型,另一双等。为了避免这种冲突,我们经常使用类型的数据类型。一个简单的例子如下所示。

import std.stdio;

alias int myAppNumber;
alias string myAppString;

void main()
{
   myAppNumber i = 10;
   myAppString s = "TestString";

   writeln(i,s);  
}

当上面的代码被编译并执行,它会产生什么结果如下:

10TestString

类变量别名

如果不熟悉的类和继承的概念,看看关于classesand继承教程开始本节之前。往往有规定,我们需要访问的子类父类的成员变量,这可以成为可能的别名,可能以不同的名称。一个简单的例子如下所示。

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);
}

当上面的代码被编译并执行,它会产生结果如下:

10TestString

this别名

这个别名提供了用户自定义类型的自动类型转换的能力。其语法如下所示,其中的关键字的别名,这都写在成员变量或者成员函数的两侧。

alias member_variable_or_member_function 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));
}

在上面的例子中,可以看到,结构矩形转换为double值,在别名的帮助下这个方法。此代码被编译并执行,它会产生结果如下:

30