现在的位置: 首页 > 综合 > 正文

CodeDomHelper类初稿

2012年03月08日 ⁄ 综合 ⁄ 共 5469字 ⁄ 字号 评论关闭
  1using System;
  2using System.CodeDom;
  3using System.CodeDom.Compiler;
  4using Microsoft.CSharp;
  5using System.IO;
  6
  7namespace CodeDomFacade
  8{
  9    /// <summary>
 10    /// 该类封装了CodeCom相关操作,方便外部使用
 11    /// </summary>

 12    public class CodeDomHelper
 13    {
 14
 15        protected CodeCompileUnit _CodeRoot;
 16        protected CodeNamespace _cn;
 17        protected CodeDomProvider _provider;
 18        protected string _strFileName;
 19        protected CodeTypeDeclaration _ctdClass;
 20
 21        public CodeDomHelper()
 22        {
 23            _CodeRoot=new CodeCompileUnit();
 24            _ctdClass=new CodeTypeDeclaration();
 25        }

 26
 27        /// <summary>
 28        /// 生成代码输出到文件
 29        /// </summary>

 30        public void GenerateCode()
 31        {
 32            try
 33            {
 34                // Obtain an ICodeGenerator from a CodeDomProvider class.
 35                ICodeGenerator gen = _provider.CreateGenerator();
 36                // Create a TextWriter to a StreamWriter to an output file.
 37                IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(_strFileName, false), "    ");
 38                // Generate source code using the code generator.
 39                gen.GenerateCodeFromCompileUnit(_CodeRoot, tw, new CodeGeneratorOptions());
 40                // Close the output file.
 41                tw.Close();
 42            }

 43            catch(System.Exception e)
 44            {
 45                throw e;
 46            }

 47        }

 48
 49        /// <summary>
 50        /// 生成C#代码
 51        /// </summary>

 52        public void GenerateCSharpCode()
 53        {
 54            _provider=new CSharpCodeProvider();//设定生成代码为C#代码
 55            GenerateCode();//生成代码,写入指定文件
 56        }

 57        /// <summary>
 58        /// 设置代码命名空间
 59        /// </summary>
 60        /// <param name="name">命名空间名字</param>

 61        public void DefineNameSpace(string name)
 62        {
 63            try
 64            {
 65                _cn=new CodeNamespace(name);
 66                _CodeRoot.Namespaces.Add(_cn);
 67            }

 68            catch(System.Exception e)
 69            {
 70                throw e;
 71            }

 72        }

 73
 74        /// <summary>
 75        /// 添加引用命名空间
 76        /// </summary>
 77        /// <param name="name">被引用命名空间名字</param>

 78        public void AddImportNameSpace(string name)
 79        {
 80            try
 81            {
 82                _cn.Imports.Add(new CodeNamespaceImport(name));
 83            }

 84            catch(System.Exception e)
 85            {
 86                throw e;
 87            }

 88        }

 89
 90        /// <summary>
 91        /// 添加一个类
 92        /// </summary>
 93        /// <param name="classname">类名</param>

 94        public void AddClass(string classname)
 95        {
 96            try
 97            {
 98                _ctdClass.Name=classname;
 99                _cn.Types.Add(_ctdClass);
100            }

101            catch(System.Exception e)
102            {
103                throw e;
104            }

105        }

106
107        /// <summary>
108        /// 添加一个方法到类
109        /// </summary>
110        /// <param name="methodname">方法名</param>
111        /// <param name="returntype">返回值类型,如"System.Int32"</param>
112        /// <param name="visit">访问控制类型"public" or "private"</param>

113        public CodeMemberMethod AddMethod(string methodname,string returntype,string visit)
114        {
115            CodeMemberMethod cmm=new CodeMemberMethod();
116            try
117            {
118                cmm.Name=methodname;
119                cmm.ReturnType =new CodeTypeReference(returntype);
120                switch(visit)
121                {
122                    case "public":
123                        cmm.Attributes=MemberAttributes.Public|MemberAttributes.Final; 
124                        break;
125                    case "private":
126                        cmm.Attributes=MemberAttributes.Private|MemberAttributes.Final; 
127                        break;
128                    default:
129                        cmm.Attributes=MemberAttributes.Private|MemberAttributes.Final; 
130                        break;
131                }

132            
133                _ctdClass.Members.Add(cmm);
134            }

135            catch(System.Exception e)
136            {
137                throw e;
138            }

139            return cmm;
140        }

141
142        /// <summary>
143        /// 添加带有普通的get/set操作属性
144        /// </summary>
145        /// <param name="pname">属性名</param>
146        /// <param name="returntype">返回值类型</param>
147        /// <param name="visit">访问控制类型</param>
148        /// <param name="fieldname">访问字段名</param>
149        /// <returns>返回添加的属性,待以后操作,如添加原代码段</returns>

150        public CodeMemberProperty AddProperty(string pname,string returntype,string visit,string fieldname)
151        {    
152            CodeMemberProperty cmp=new CodeMemberProperty();
153            try
154            {
155                cmp.Name=pname;
156                cmp.Type=new CodeTypeReference(returntype);
157                switch(visit)
158                {
159                    case "public":
160                        cmp.Attributes=MemberAttributes.Public|MemberAttributes.Final; 
161                        break;
162                    case "private":
163                        cmp.Attributes=MemberAttributes.Private|MemberAttributes.Final; 
164                        break;
165                    <

抱歉!评论已关闭.