p; // 产生 m_property = value;
CodeAssignStatement propertyAssignment = new CodeAssignStatement(field,
new CodePropertySetValueReferenceExpression());
property.SetStatements.Add(propertyAssignment);
m_Class.Members.Add(property);
}
}
这些生成的属性是可读写的。这就需要将HasGet和HasSet两个属性设为true,然后分别将get和set方法中的语句分别加到GetStatements和SetStatements中。
六、构造函数的生成
构造函数的主要工作是打开数据表。如果数据表不存在,就创建这个数据表文件。在编写代码之前,需要先定义三个全局变量。因为这三个全局变量在程序中会多次用到。它们的类型都是CodeVariableReferenceExpression。这个类型变量其实在生成源码中的作用就是对某一个变量的引用。具体的实现代码如下:
private CodeVariableReferenceExpression m_XmlFileExpression;
private CodeVariableReferenceExpression m_XmlExpression;
private CodeVariableReferenceExpression m_AddFlagExpression;
private void InitVariants()
{
m_XmlFileExpression = new CodeVariableReferenceExpression("m_XmlFile");
m_XmlExpression = new CodeVariableReferenceExpression("m_xml");
m_AddFlagExpression = new CodeVariableReferenceExpression("m_AddFlag");
}
下面是生成构造函数的源代码:
private void GenerateConstructor()
{
// 定义构造函数
CodeConstructor constructor = new CodeConstructor();
constructor.Parameters.Add(new CodeParameterDeclarationExpression("System.String", "xmlFile"));
constructor.Attributes = MemberAttributes.Public;
// 产生 "m_XmlFile = xmlFile;"
CodeAssignStatement assignXmlFile = new CodeAssignStatement(m_XmlFileExpression,
new CodeVariableReferenceExpression("xmlFile"));
// 产生 "m_xml.LoadXml("…");"
CodeMethodInvokeExpression invokeLoadXml = new CodeMethodInvokeExpression(m_XmlExpression, "LoadXml",
new CodePrimitiveExpression("<?xml version=\"1.0\" encoding=\"gb2312\" ?><" + m_Xml.DocumentElement.Name
+ "></" + m_Xml.DocumentElement.Name + ">"));
// 产生 "m_xml.Save(m_XmlFile);"
CodeMethodIn