如何创建从另一个继承并在CodeDom中传递类型参数的类?

时间:2009-08-28 16:58:49

标签: c# codedom type-parameter

这就是我想要的结果类声明:

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

}

此代码(剪辑):

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 });

生成此类声明:

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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

我认为BaseType的以下字符串应该处理(未经测试):

"DataObjectBase`1[[Refund]]"

您可能需要为Refund提供一个完全限定的名称,至少包括程序集名称:

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

然后您应该删除行targetClass.TypeParameters.Add(...)

答案 1 :(得分:1)

如果您使用Expressions to CodeDOM,则可能是

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