Как создать класс, который наследуется от другого и передает параметр типа в CodeDom? - PullRequest
3 голосов
/ 28 августа 2009

Вот как я хочу, чтобы итоговое объявление класса выглядело так:

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 ]

2 голосов
/ 28 августа 2009

Я думаю, что следующая строка для BaseType должна помочь (не проверено):

"DataObjectBase`1[[Refund]]"

Возможно, вам потребуется предоставить полное имя для Refund, по крайней мере, включая имя сборки:

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

И тогда вы должны удалить строку targetClass.TypeParameters.Add(...).

1 голос
/ 22 сентября 2009

Если вы используете выражения для CodeDOM , это может быть

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