问题
Here's what I want the resulting class declaration to look like:
public sealed partial class Refund : DataObjectBase<Refund>
{
}
}
This 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 });
Produces this class declaration:
public sealed partial class Refund<Refund> : DataObjectBase
{
}
What am I doing wrong?
回答1:
I think that the following string for the BaseType should do the trick (untested):
"DataObjectBase`1[[Refund]]"
It may be possible that you need to provide a fully-qualified name for Refund
, at least including the assembly name:
"DataObjectBase`1[[Refund, RefundAssembly]]"
And you should then remove the line targetClass.TypeParameters.Add(...)
.
回答2:
If you use Expressions to CodeDOM it could be
var cls = Define.Class("Refund",
TypeAttributes.Public | TypeAttributes.Sealed, true)
.Inherits(CodeDom.TypeRef("DataObjectBase","Refund"))
来源:https://stackoverflow.com/questions/1348268/how-do-i-create-a-class-that-inherits-from-another-and-passes-a-type-parameter-i