2009-08-28 7 views
0

Je ne me souviens pas exactement où j'ai vu cet étrange `1 (single-tick et le numéro 1) apparaissant à côté des noms de classe, mais il est apparu lors de l'inspection des valeurs variables lors du débogage et plus récemment dans la réponse à this question.Quel est le "1" pour les noms de classe envoyés depuis Reflection/CodeDom/CLR?

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

Je suis curieuse: d'où cela vient-il et pourquoi est-ce là?

Répondre

6

C'est un type générique avec 1 paramètre de type.

Par exemple, List<T> est

System.Collections.Generic.List`1 

et Dictionary<TKey, TValue> est

System.Collections.Generic.Dictionary`2 

Cela permet à des types génériques d'être surchargées par le nombre de paramètres de type.

+0

+1 Yikes! 6 secondes plus vite - c'est le plus proche que j'ai jamais vu deux réponses ensemble! Bien joué ... –

+0

@Andrew: J'ai été battu par Jon de 3 secondes, je pense. –

+0

Laisser à Jon de tenir l'enregistrement :) –

2

C'est le nombre de paramètres de type générique dans les noms de classe conformes CLS. C'est nécessaire parce que les types peuvent être surchargés sur le nombre de paramètres; par exemple .:

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

Pour distinguer ces cas, le compilateur génère les noms distincts suivants:

Foo 
Foo`1 
Foo`2 

Notez que tout cela est une exigence de fournisseur de CLS, il n'est pas une exigence CLR ou la limitation. En ce qui concerne CLR lui-même, un type générique peut avoir n'importe quel nom, mais aucun type ne peut avoir le même nom complet. D'où la nécessité du schéma de rattrapage.

Questions connexes