2009-08-28 10 views
3

Voici ce que je veux la déclaration de classe résultant pour ressembler à:Comment créer une classe qui hérite d'une autre et passe un paramètre de type dans CodeDom?

public sealed partial class Refund : DataObjectBase<Refund> 
{ 
} 

}

Ce code (snipped):

targetClass = new CodeTypeDeclaration(className); 
      targetClass.IsClass = true; 
      targetClass.TypeAttributes = 
       TypeAttributes.Public | TypeAttributes.Sealed; 
      targetClass.IsPartial = true; //partial so that genn'ed code can be safely modified 
      targetClass.TypeParameters.Add(new CodeTypeParameter{ Name=className}); 
      targetClass.BaseTypes.Add(new CodeTypeReference { BaseType = "DataObjectBase", Options = CodeTypeReferenceOptions.GenericTypeParameter }); 

Produit cette déclaration de classe:

public sealed partial class Refund<Refund> : DataObjectBase 
{ 
} 

Qu'est-ce que je fais mal?

Répondre

2

Je pense que la chaîne suivante pour la BaseType devrait faire l'affaire (non testé):

"DataObjectBase`1[[Refund]]" 

Il est possible que vous devez fournir un nom entièrement qualifié pour Refund, comprenant au moins l'assemblage nom:

"DataObjectBase`1[[Refund, RefundAssembly]]" 

Et vous devez alors supprimer la ligne targetClass.TypeParameters.Add(...).

+2

La ligne correcte a fini par être * targetClass.BaseTypes.Add (nouveau CodeTypeReference {BaseType = "DataObjectBase'1 [remboursement]", Options = CodeTypeReferenceOptions.GenericTypeParameter}) * –

1

Si vous utilisez Expressions to CodeDOM il pourrait être

var cls = Define.Class("Refund", 
    TypeAttributes.Public | TypeAttributes.Sealed, true) 
    .Inherits(CodeDom.TypeRef("DataObjectBase","Refund"))