别名(Aliases)

优质
小牛编辑
114浏览
2023-12-01

别名,如名称所指,为现有名称提供备用名称。 别名的语法如下所示。

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

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

数据类型的别名

很多时候,我们可能会定义需要在整个应用程序中使用的常见数据类型。 当多个程序员编写应用程序代码时,可能会出现一个人使用int,另一个人使用int等情况。 为避免此类冲突,我们经常使用数据类型的类型。 一个简单的例子如下所示。

例子 (Example)

import std.stdio;
alias int myAppNumber; 
alias string myAppString;  
void main() { 
   myAppNumber i = 10; 
   myAppString s = "TestString"; 
   writeln(i,s);   
}

编译并执行上述代码时,会产生以下结果 -

10TestString

类变量的别名

通常需要我们需要访问子类中超类的成员变量,这可以通过别名实现,可能使用不同的名称。

如果您不熟悉classesinheritance的概念,请在开始本节之前查看有关classesinheritance的教程。

例子 (Example)

一个简单的例子如下所示。

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

别名这个

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

alias member_variable_or_member_function this; 

例子 (Example)

下面显示了一个示例,以显示别名的功效。

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

在上面的示例中,您可以看到结构矩形在alias this方法的帮助下转换为double值。

编译并执行上述代码时,会产生以下结果 -

30