The CodeDOM provides types that represent many common types of source code elements. You can design a program that builds a source code model using CodeDOM elements to assemble an object graph. This object graph can be rendered as source code using a CodeDOM code generator for a supported programming language. The CodeDOM can also be used to compile source code into a binary assembly.
This article contains some helper methods you can use to create a class using CodeDOM.
Creating a namespace
private CodeNamespace CreateNameSpace(String name)
{
CodeNamespace CurrentNameSpace = new CodeNamespace(name);
CurrentNameSpace.Imports.Add(new CodeNamespaceImport("System"));
CurrentNameSpace.Imports.Add(new CodeNamespaceImport("System.Text"));
CurrentNameSpace.Imports.Add(new CodeNamespaceImport("System.Collections.Generic"));
CurrentNameSpace.Imports.Add(new CodeNamespaceImport("System.IO"));
CurrentNameSpace.Imports.Add(new CodeNamespaceImport("System.Collections.Specialized"));
CurrentNameSpace.Imports.Add(new CodeNamespaceImport("System.Collections.ObjectModel"));
return CurrentNameSpace;
}
Or
private CodeNamespace CreateNameSpace(String name, CodeNamespaceImport[] imports)
{
CodeNamespace CurrentNameSpace = new CodeNamespace(name);
CurrentNameSpace.Imports.AddRange(imports);
return CurrentNameSpace;
}
Creating a class
private CodeTypeDeclaration CreateClass(String className)
{
CodeTypeDeclaration ctd = new CodeTypeDeclaration(className);
ctd.IsClass = true;
ctd.Attributes = MemberAttributes.Public;
return ctd;
}
Creating class variables
private CodeMemberField CreateClassVariable(System.Type type, String name)
{
CodeMemberField classVariable = new CodeMemberField(type, name);
classVariable.Attributes = MemberAttributes.Private;
return classVariable;
}
Create Properties
private CodeMemberProperty CreateClassProperty(Boolean isReadOnly, String name, Type type, String variableName)
{
CodeMemberProperty property = new CodeMemberProperty();
property.Name = name;
property.Type = new CodeTypeReference(type);
property.Attributes = MemberAttributes.Public;
property.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), variableName)));
if(!isReadOnly)
property.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), variableName), new CodePropertySetValueReferenceExpression()));
return property;
}
Creating methods
private CodeMemberMethod CreateMethod(String methodName, CodeTypeReference returnType, CodeParameterDeclarationExpressionCollection methodParams, MemberAttributes accessModifier)
{
CodeMemberMethod method = new CodeMemberMethod();
method.Name = methodName;
method.ReturnType = returnType;
method.Parameters.AddRange(methodParams);
method.Attributes = accessModifier;
return method;
}