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
廣告