D编程 别名(Alias)

2021-09-01 10:36 更新

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

alias new_name=existing_name;

以下是较旧的语法,以防万一您引用一些较旧的格式示例,强烈建议不要使用此方法。

alias existing_name new_name; 

表达式还有另一种语法,下面给出了该语法,在该语法中,我们可以直接使用别名而不是表达式。

alias expression alias_name ;

下面显示了一个使用别名alise的简单示例,该示例使用提供类型转换函数的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,以使其更方便和更易于理解。

元组Tuple别名

让我们看另一个示例,在该示例中,我们可以为元组设置别名。

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

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

数据类型别名

很多时候,我们可能会定义需要在整个应用程序中使用的通用数据类型,为了避免这种冲突,我们经常将类型用作数据类型。一个简单的如下所示。

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

别名aliase提供了用户定义类型的自动类型转换的函数,语法如下所示。

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

在上面的示例中,您可以看到在此方法的别名帮助下将struct矩形转换为double值,编译并执行上述代码后,将产生以下输出-

30


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号