位置:首頁 > 高級語言 > 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

在上麵的例子,而不是使用!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