2009-08-28 10 views
0

私はこの奇妙なところを見たことがありません。`1(シングルティックと1)はクラス名の隣に表示されますが、デバッグ時に変数値を検査したときに表示され、最近では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.Dictionary`2 

System.Collections.Generic.List`1 

Dictionary<TKey, TValue>があります。

+0

+1 Yikes! 6秒間のスピードアップ - それは私が2つの答えを一緒に見たことが一番近いです!よく遊んだ... –

+0

@Andrew:私は3秒でJonに殴られたと思う。 –

+0

レコードを保持するためにJonに残してください:) –

2

これは、CLS準拠のクラス名のジェネリック型パラメータの数です。これは、型がパラメータの数でオーバーロードされる可能性があるため必要です。これはCLSプロバイダの要件であるが、それはCLR要件又は限定するものではないこと

Foo 
Foo`1 
Foo`2 

注:例えば:

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

これらのケースを区別するために、コンパイラは、次の異なる名前を生成します。 CLR自体に関しては、ジェネリック型には任意の名前を付けることができますが、2つの型で同じ完全修飾名を使用することはできません。したがって、バックティック・マングリング・スキームの必要性。

関連する問題