2017-04-26 115 views
1

從C#5.0規格構造類型,有界類型和無界類型的含義?

4.4構造類型

一個通用類型聲明,其本身表示綁定的泛型 類型被用作一個「藍圖」,以形成許多不同類型的,通過 應用類型參數的方式。類型參數寫在 通用類型的名稱後面的尖括號(<和>)中。未綁定的泛型只能在 typeof-表達式(第7.6.11節)中使用。包含至少一個類型 自變量的類型稱爲構造類型。一種構造類型可以是 ,用於大多數語言中可以顯示類型名稱的地方。 未綁定的泛型類型只能在typeof-表達式 (第7.6.11節)中使用。
構造類型也可以在表達式中用作簡單名稱(第7.6.2節)或訪問成員(第7.6.4節)時使用。

「構造類型」的概念是否與「有界泛型」的概念相同?

4.4.3結合和未結合類型

術語未綁定類型指非通用型或未綁定 通用類型。術語綁定類型是指非泛型類型或 構造類型。

未綁定類型指的是由 類型聲明聲明的實體。 未綁定的泛型類型本身不是一種類型,並且 不能用作變量類型,參數或返回值,或者 作爲基類型。唯一可以引用非綁定泛型 的構造是類型表達式(第7.6.11節)。

是非泛型類型都是未綁定和綁定類型嗎?

+0

Jon Skeet在這裏的一個很好的(相關的)總結http://stackoverflow.com/a/1735060/1663001 – DavidG

回答

5

「構造類型」的概念與「有界泛型」的概念是否相同?

是的,取消您的排字錯誤。你的意思是說「綁定泛型類型」,而不是「有界泛型類型」。

是非泛型類型都是未綁定和綁定類型嗎?

是的。

爲什麼這些術語如此多餘/重複/卷積?

這些術語是爲了方便規範作者和編譯器團隊而發明的。您確定的唯一冗餘是構造的等於約束通用,這對我來說似乎很合理。我沒有看到任何重複或卷積。

如果這些術語看起來很複雜,那麼我向你提出現代業務線OO語言的類型理論是一個複雜的主題;它的行話反映了這種複雜性。

這可能有助於思考這種方式。假設我們有一個C類的是採用n型參數,對於n> = 0:

  • 概念C-該通吃n型參數未結合類型。
  • 概念C與n型參數是一個綁定類型。
  • 一個約束泛型類型必須是一個泛型類型已經類型參數構造,所以我們稱之爲構造類型

顯然,如果n == 0,那麼C同時是綁定和非綁定類型。

+0

謝謝。爲什麼這些術語如此冗長/重複/令人費解? – Tim