CodeDom 笔记整理
學習博客園 lichdr的動態生成與編譯系列文章http://www.cnblogs.com/lichdr/category/12610.html
CodeCompileUnit compunit=new CodeCompileUnit() 生成可編譯的單元。
compunit.Namespaces.Add(sample) 添加名稱空間
命名空間
CodeNamespace sample=new CodeNamespace("Sample") 定義一個名為Sample的命名空間
sample.Imports.Add(導入名稱空間)
sample.Types.Add(添加類型)
方法
CodeMemberMethod method=new CodeMemberMethod()
method.Comments.Add(new CodeCommentStatement("注釋"))
method.Name=""
method.Attributes=MemberAttributes.Private|MemberAttributes.Static
method.Parameters.Add(new CodePatameterDeclarationExpression(typeof(int),"n"))
參數\變量應用
CodeVariableReferenceExpression("i") 變量引用
CodeArgumentReferenceExpression("n") 參數引用
賦值語句
CodeAssignStatement assignstatement=new CodeAssignStatement(new CodeVariableReferenceExpression("i"),new CodeBinaryOperatorExpression(...))
變量聲明
CodeVariableDeclarationStatement VarF2=new CodeVariableDeclarationStatement(typeof(int),"F2",new CodePrimitiveExpression(1));
二元操作表達式
CodeBinaryOperatorExpression test =new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("i"),CodeBinaryOperatorType.LessThanOrEqual,new CodeArgumentReferenceExpression("n"));? i<=1
類
CodeTypeDeclaration MyClass=new CodeTypeDeclaration("DemoClass") 定義一個名為DemoClass的類
CodeEntryPointMethod Start = new CodeEntryPointMethod() 定義程序入口點,Main
MyClass.Members.Add(Start)
Start.Statements.Add(statement) 方法添加語句
構造函數
屬性
CodeMemberProperty MyProperty=new CodeMemberProperty()
MyProperty.Name=""
MyProperty.Type=new CodeTypeReference("System.Int32");
MyProperty.Attributes=MemberAttributes.Public|MemberAttributes.Final;
MyProperty.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"myField")));
MyProperty.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"myField"),new CodePropertySetValueReferenceExpression()));
?
索引器
字段
CodeMemberField myField=new CodeMemberField("System.Int32","myField"); 產生private int myField
CodeMemberField myArray=new CodeMemberField("System.Int32[]","myArray")
myArray.Attributes=MemberAttributes.Private
myArray.InitExpression=new CodeArrayCreateExpression("System.Int32",10);
產生private int[] myArray=new int[10]
調用方法
CodeMethodInvokeExpression cs = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("System.Console"),"WriteLine",new CodePrimitiveExpression("Hello World!"));??? 調用方法的語句 System.Console.WriteLine("Hello World")
CodeMethodInvokeExpression (CodeMethodReferenceExpression method,params CodeExpression[] parameters)
for循環
CodeIterationStatement forloop=new CodeIterationStatement(初始表達式一個變量聲明,循環測試一個二元操作表達式,循環遞增語句CodeAssignStatement,循環體內的語句CodeStatement[])
TryCatch語句
if 條件語句
CodeConditionStatement(CodeExpression condition//條件判斷一般為二元操作表達式,CodeStatement[] trueStatements,CodeStatements[] falseStatements)
生成cs文件、dll、exe
StreamWriter sw = new StreamWriter("mytwo.cs",false);
new CSharpCodeProvider().GenerateCodeFromCompileUnit(compunit, sw, new CodeGeneratorOptions());
sw.Close();
CompilerParameters cp = new CompilerParameters();
cp.GenerateExecutable = true;
cp.ReferencedAssemblies.Add("System.dll");
cp.OutputAssembly = "mytwo.exe";
CompilerResults cr = new CSharpCodeProvider().CompileAssemblyFromFile(cp, "mytwo.cs");
?
?
轉載于:https://www.cnblogs.com/zscflying/archive/2013/04/11/3014805.html
總結
以上是生活随笔為你收集整理的CodeDom 笔记整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ-2195 Going Home
- 下一篇: Linux 2.6 内核定时器