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

在上面的例子,而不是使用!string(a),我們已經分配給它的別名的toString使其更方便和更容易理解,我們。

元組別名

讓我們來看看另一個例子,我們可以爲一個元組設置別名。

import std.stdio; import std.typetuple; alias TypeTuple!(int, long) TL; void method1(TL tl) { writeln(tl[0]," ", 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

類變量別名

如果不熟悉的類和繼承的概念,看看關於classesand繼承教程開始本節之前。往往有規定,我們需要訪問的子類父類的成員變量,這可以成爲可能的別名,可能以不同的名稱。一個簡單的例子如下所示。

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

當上面的代碼被編譯並執行,它會產生結果如下:

10TestString

this別名

這個別名提供了用戶自定義類型的自動類型轉換的能力。其語法如下所示,其中的關鍵字的別名,這都寫在成員變量或者成員函數的兩側。

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

在上面的例子中,可以看到,結構矩形轉換爲double值,在別名的幫助下這個方法。此代碼被編譯並執行,它會產生結果如下:

30