a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

c#動態編譯執行對象方法示例 運用映射機制創建對象

2020-01-24 02:53:19
字體:
來源:轉載
供稿:網友

C#是一種編譯型的語言,程序執行,首先要經過編譯器編譯,如何讓C#像一種腳本一樣,在要執行的時候,進行編譯,這里,我們可以用Microsoft.CSharp空間下的CSharpCodeProvider提供類,來達到動態編譯的效果。在這里,我新建一個控制臺程序,在Program.cs類里引用using System.CodeDom.Compiler;
using System.Reflection;using Microsoft.CSharp;三大命名空間

復制代碼 代碼如下:

#region using directiry
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.CSharp;
#endregion
/*==============================================================================
 *
 * author:lichaoqiang@163.com
 * link:http://my.oschina.net/lichaoqiang
 *
 *
 * ============================================================================*/
namespace CodeDom
{
    class Program
    {
        #region 主程序入口
        /// <summary>
        ///主程序入口
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //1>實例化C#代碼服務提供對象
            CSharpCodeProvider provider = new CSharpCodeProvider();
            //2>聲明編譯器參數
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateExecutable = false;
            parameters.GenerateInMemory = true;
            try
            {
                //3>動態編譯
                CompilerResults result = provider.CompileAssemblyFromSource(parameters, BuildCSharpCode());
                if (result.Errors.Count > 0)
                {
                    Console.Write("編譯出錯!");
                }
                //4>如果編譯沒有出錯,此刻已經生成動態程序集LCQ.LCQClass
                //5>開始玩C#映射
                Assembly assembly = result.CompiledAssembly;
                object obj = assembly.CreateInstance("LCQ.LCQClass");
                Type type = assembly.GetType("LCQ.LCQClass");
                //6>獲取對象方法
                MethodInfo method = type.GetMethod("Sum");
                object[] objParameters = new object[2] { 1, 5 };
                int iResult = Convert.ToInt32(method.Invoke(obj, objParameters));//喚醒對象,執行行為
                Console.Write(iResult);
                Console.Read();
            }
            catch (System.NotImplementedException ex)
            {
                Console.Write(ex.Message);
            }
            catch (System.ArgumentException ex)
            {
                Console.Write(ex.Message);
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }
        }
        #endregion

        #region 生成代碼塊
        /// <summary>
        /// 生成代碼塊
        /// </summary>
        /// <returns></returns>
        private static string BuildCSharpCode()
        {
            string fileName = AppDomain.CurrentDomain.BaseDirectory.Replace("Debug", string.Empty).Replace("Release", string.Empty) + "CodeFile.cs";
            string strCodeDom = File.ReadAllText(fileName);
            return strCodeDom;
        }
        #endregion
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91在线观 | 色婷婷综合久久久久中文一区二区 | 成人免费一区二区三区视频网站 | 天天射射天天 | 一区二区精品 | 一区二区av | 国产精品一区二 | 日本不卡免费新一二三区 | 91亚洲国产成人久久精品网站 | 久久男人天堂 | 国产在线一区二区 | 少妇一区二区三区 | 一级看片 | 欧美视频在线播放 | av在线不卡播放 | 久久e久久 | 久久久久久综合 | 一区二区三区四区在线 | 欧美一区二区三区在线看 | 日韩欧美网| 在线a级| 成人免费精品 | 亚洲精品美女久久久久久久久久 | 国产精品理论电影 | 色视频免费在线观看 | 日韩成人免费电影 | 久久综合九九 | 天天操网| 国产在线一区二区三区 | 中文字幕 视频一区 | 日韩国产在线观看 | 久久在线视频 | 欧美日韩二区三区 | 亚州成人 | 欧美高清在线观看 | 日韩精品在线免费观看 | 久综合在线 | 日韩欧美国产一区二区三区 | 啊v在线视频 | av免费网站在线观看 | 簧片av |