D編程 別名(Alias)

2021-09-01 10:36 更新

別名Aliase為現(xiàn)有名稱提供了備用名稱,別名的語(yǔ)法如下所示。

alias new_name=existing_name;

以下是較舊的語(yǔ)法,以防萬(wàn)一您引用一些較舊的格式示例,強(qiáng)烈建議不要使用此方法。

alias existing_name new_name; 

表達(dá)式還有另一種語(yǔ)法,下面給出了該語(yǔ)法,在該語(yǔ)法中,我們可以直接使用別名而不是表達(dá)式。

alias expression alias_name ;

下面顯示了一個(gè)使用別名alise的簡(jiǎn)單示例,該示例使用提供類型轉(zhuǎn)換函數(shù)的std.conv標(biāo)頭。

import std.stdio; 
import std.conv:to; 
 
alias to!(string) toString;  

void main() { 
   int a=10;  
   string s="Test"~toString(a); 
   writeln(s); 
}

編譯并執(zhí)行上述代碼后,將產(chǎn)生以下輸出-

Test10 

在上面的示例中,我們沒(méi)有使用to!string(a),而是將其分配給別名toString,以使其更方便和更易于理解。

元組Tuple別名

讓我們看另一個(gè)示例,在該示例中,我們可以為元組設(shè)置別名。

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

編譯并執(zhí)行上述代碼后,將產(chǎn)生以下輸出-

5	6

在上面的示例中,將元組類型分配給了別名變量,它簡(jiǎn)化了方法定義和變量的訪問(wèn)。當(dāng)我們嘗試重用此類元組時(shí),這種訪問(wèn)方式甚至更有用。

數(shù)據(jù)類型別名

很多時(shí)候,我們可能會(huì)定義需要在整個(gè)應(yīng)用程序中使用的通用數(shù)據(jù)類型,為了避免這種沖突,我們經(jīng)常將類型用作數(shù)據(jù)類型。一個(gè)簡(jiǎn)單的如下所示。

import std.stdio;
  
alias int myAppNumber; 
alias string myAppString;  

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

編譯并執(zhí)行上述代碼后,將產(chǎn)生以下輸出-

10TestString

類變量的別名

通常需要在子類中訪問(wèn)超類的變量,這可以通過(guò)別名來(lái)實(shí)現(xiàn),一個(gè)簡(jiǎn)單的如下所示。

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

編譯并執(zhí)行上述代碼后,將產(chǎn)生以下輸出-

Square 
42

別名aliase提供了用戶定義類型的自動(dòng)類型轉(zhuǎn)換的函數(shù),語(yǔ)法如下所示。

alias member_variable_or_member_function this; 

下面顯示一個(gè)示例,以顯示別名this的函數(shù)。

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矩形轉(zhuǎn)換為double值,編譯并執(zhí)行上述代碼后,將產(chǎn)生以下輸出-

30


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)