How do I create a class that inherits from another and passes a type parameter in CodeDom?

北战南征 提交于 2019-12-04 04:28:07

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!