国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

c#動(dòng)態(tài)編譯執(zhí)行對(duì)象方法示例 運(yùn)用映射機(jī)制創(chuàng)建對(duì)象

2020-01-24 02:53:19
字體:
供稿:網(wǎng)友

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

復(fù)制代碼 代碼如下:

#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>實(shí)例化C#代碼服務(wù)提供對(duì)象
            CSharpCodeProvider provider = new CSharpCodeProvider();
            //2>聲明編譯器參數(shù)
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateExecutable = false;
            parameters.GenerateInMemory = true;
            try
            {
                //3>動(dòng)態(tài)編譯
                CompilerResults result = provider.CompileAssemblyFromSource(parameters, BuildCSharpCode());
                if (result.Errors.Count > 0)
                {
                    Console.Write("編譯出錯(cuò)!");
                }
                //4>如果編譯沒有出錯(cuò),此刻已經(jīng)生成動(dòng)態(tài)程序集LCQ.LCQClass
                //5>開始玩C#映射
                Assembly assembly = result.CompiledAssembly;
                object obj = assembly.CreateInstance("LCQ.LCQClass");
                Type type = assembly.GetType("LCQ.LCQClass");
                //6>獲取對(duì)象方法
                MethodInfo method = type.GetMethod("Sum");
                object[] objParameters = new object[2] { 1, 5 };
                int iResult = Convert.ToInt32(method.Invoke(obj, objParameters));//喚醒對(duì)象,執(zhí)行行為
                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
    }
}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 应城市| 三门峡市| 三穗县| 金溪县| 马山县| 东乌| 沅江市| 抚顺县| 武威市| 札达县| 宜城市| 延边| 永修县| 房山区| 湘乡市| 米脂县| 山阴县| 北京市| 同江市| 江油市| 五台县| 高安市| 年辖:市辖区| 寿光市| 台山市| 远安县| 阳江市| 当阳市| 敦化市| 抚松县| 和顺县| 广河县| 姚安县| 云安县| 呼伦贝尔市| 凉城县| 梅州市| 星座| 新邵县| 体育| 二连浩特市|