2009-08-28 40 views
0

我記不清楚我在哪裏看到這個奇怪的`1(single-tick和number1)出現在classnames旁邊,但在調試時檢查變量值時顯示出來,最近出現在this question的答案中。從Reflection/CodeDom/CLR發送的類名中的「1」是什麼?

targetClass.BaseTypes.Add(new CodeTypeReference { BaseType = "DataObjectBase`1[Refund]", Options = CodeTypeReferenceOptions.GenericTypeParameter }) 

我很好奇:這是從哪裏來的,它爲什麼在那裏?

回答

6

這是一個帶有1個參數的泛型類型。

例如,List<T>

System.Collections.Generic.List`1 

Dictionary<TKey, TValue>

System.Collections.Generic.Dictionary`2 

這允許一般類型被類型參數的數量被重載。

+0

+1 Yikes!快6秒 - 這是我見過的最接近的兩個答案!好玩... – 2009-08-28 19:30:05

+0

@安德魯:我認爲,我被喬恩擊敗了3秒。 – 2009-08-28 19:31:28

+0

讓它留給Jon來保存記錄:) – 2009-08-28 19:33:19

2

這是CLS兼容類名中的泛型類型參數的數量。這是必要的,因爲類型可以在參數數量上過載;例如: -

class Foo { } 
class Foo<T1> { } 
class Foo<T1, T2> { } 

爲了區分這些情況下,編譯器生成以下不同的名稱:

Foo 
Foo`1 
Foo`2 

注意,雖然這是一個CLS供應商的要求,它不是一個CLR的要求或限制。就CLR本身而言,泛型類型可以有任何名稱,但沒有兩種類型可以具有相同的完全限定名稱。因此需要反向調節方案。

相關問題