程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 動態編譯及反射執行

C# 動態編譯及反射執行

編輯:C#入門知識

#region 程序集1 無參數、靜態類下的靜態方法

        static void CodeAssembly_1()
        {
            //提供對 C# 代碼生成器和代碼編譯器的實例的訪問。
            CSharpCodeProvider provider = new CSharpCodeProvider();

            //表示用於調用編譯器的參數
            CompilerParameters parameter = new CompilerParameters();
            //獲取當前項目所引用的程序集。
            parameter.ReferencedAssemblies.Add("System.dll");
            //獲取或設置一個值,該值指示是否生成可執行文件。
            parameter.GenerateExecutable = false;
            //獲取或設置一個值,該值指示是否在內存中生成輸出。
            parameter.GenerateInMemory = true;

            //使用指定的編譯器設置,從包含源代碼的字符串的指定數組,編譯程序集。返回編譯結果。
            CompilerResults result = provider.CompileAssemblyFromSource(parameter,
                GetCode_1("120/12"));//將你的式子放在這裡
            //獲取編譯器錯誤和警告的集合
            if (result.Errors.Count > 0)
            {
                Console.WriteLine("動態編譯出錯了!");
            }
            else
            {
                //獲取或設置已編譯的程序集。
                Assembly assembly = result.CompiledAssembly;
                //獲取當前實例的 Type
                Type AType = assembly.GetType("NameSpace_1.Class_1");
                //獲取類型的方法
                MethodInfo method = AType.GetMethod("Func");
                //調用方法
                Console.WriteLine(method.Invoke(null, null));
            }
            Console.Read();
        }
        //獲取代碼
        private static string GetCode_1(string para)
        {
            StringBuilder codes = new StringBuilder();
            //引用
            codes.Append("using System; ");
            //命名空間定義
            codes.Append("namespace NameSpace_1");
            codes.Append("{");
            //類定義
            codes.Append("  public class Class_1");
            codes.Append("  {");
            //方法定義
            codes.Append("      public static object Func()");
            codes.Append("      {");
            codes.Append("          return (" + para + ");");
            codes.Append("      }");
            codes.Append("  }");
            codes.Append("}");

            return (codes.ToString());
        }

        #endregion

 

 

 

        #region 程序集2 含構造函數類需要生成實例對象後調用還參數方法

        static void CodeAssembly_2()
        {
            //提供對 C# 代碼生成器和代碼編譯器的實例的訪問。
            CSharpCodeProvider provider = new CSharpCodeProvider();

            //表示用於調用編譯器的參數
            CompilerParameters parameter = new CompilerParameters();
            //獲取當前項目所引用的程序集。
            parameter.ReferencedAssemblies.Add("System.dll");
            //獲取或設置一個值,該值指示是否生成可執行文件。
            parameter.GenerateExecutable = false;
            //獲取或設置一個值,該值指示是否在內存中生成輸出。
            parameter.GenerateInMemory = true;

            //使用指定的編譯器設置,從包含源代碼的字符串的指定數組,編譯程序集。返回編譯結果。
            CompilerResults result = provider.CompileAssemblyFromSource(parameter, GetCode_2());
            //獲取編譯器錯誤和警告的集合
 &nb

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved