- D 程式設計基礎
- D 程式設計 - 首頁
- D 程式設計 - 概述
- D 程式設計 - 環境
- D 程式設計 - 基本語法
- D 程式設計 - 變數
- D 程式設計 - 資料型別
- D 程式設計 - 列舉
- D 程式設計 - 字面量
- D 程式設計 - 運算子
- D 程式設計 - 迴圈
- D 程式設計 - 條件語句
- D 程式設計 - 函式
- D 程式設計 - 字元
- D 程式設計 - 字串
- D 程式設計 - 陣列
- D 程式設計 - 關聯陣列
- D 程式設計 - 指標
- D 程式設計 - 元組
- D 程式設計 - 結構體
- D 程式設計 - 聯合體
- D 程式設計 - 範圍
- D 程式設計 - 別名
- D 程式設計 - 混入
- D 程式設計 - 模組
- D 程式設計 - 模板
- D 程式設計 - 不可變
- D 程式設計 - 檔案 I/O
- D 程式設計 - 併發
- D 程式設計 - 異常處理
- D 程式設計 - 合約
- D - 條件編譯
- D 程式設計 - 面向物件
- D 程式設計 - 類與物件
- D 程式設計 - 繼承
- D 程式設計 - 過載
- D 程式設計 - 封裝
- D 程式設計 - 介面
- D 程式設計 - 抽象類
- D 程式設計 - 有用資源
- D 程式設計 - 快速指南
- D 程式設計 - 有用資源
- 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
在上面的示例中,我們沒有使用 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