最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2014年01月16日 11:14:10   作者:  
本示例核心技術(shù)是運(yùn)用.NET動態(tài)編譯技術(shù)+.NET映射技術(shù),把一個代碼塊中的代碼,動態(tài)編譯成程序集后,在運(yùn)用映射機(jī)制,創(chuàng)建對象示例,調(diào)用對象方法

C#是一種編譯型的語言,程序執(zhí)行,首先要經(jīng)過編譯器編譯,如何讓C#像一種腳本一樣,在要執(zhí)行的時候,進(jìn)行編譯,這里,我們可以用Microsoft.CSharp空間下的CSharpCodeProvider提供類,來達(dá)到動態(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ù)提供對象
            CSharpCodeProvider provider = new CSharpCodeProvider();
            //2>聲明編譯器參數(shù)
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateExecutable = false;
            parameters.GenerateInMemory = true;
            try
            {
                //3>動態(tài)編譯
                CompilerResults result = provider.CompileAssemblyFromSource(parameters, BuildCSharpCode());
                if (result.Errors.Count > 0)
                {
                    Console.Write("編譯出錯!");
                }
                //4>如果編譯沒有出錯,此刻已經(jīng)生成動態(tài)程序集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));//喚醒對象,執(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
    }
}

相關(guān)文章

  • C#實(shí)現(xiàn)炫酷啟動圖-動態(tài)進(jìn)度條效果

    C#實(shí)現(xiàn)炫酷啟動圖-動態(tài)進(jìn)度條效果

    這篇文章主要介紹了基于C#實(shí)現(xiàn)炫酷啟動圖-動態(tài)進(jìn)度條 效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • C#通過委托調(diào)用Button單擊事件的方法

    C#通過委托調(diào)用Button單擊事件的方法

    本文給大家分享的是通過委托取消Button事件switch-case的方法,十分的簡單實(shí)用,有需要的小伙伴可以參考下。
    2015-05-05
  • C# 線程同步詳解

    C# 線程同步詳解

    本文主要介紹了C#中線程同步的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • C#類繼承自泛型集合的例子

    C#類繼承自泛型集合的例子

    在C#中,除了泛型字典外,你還可以繼承其他集合類型,本文通過實(shí)例代碼主要介紹了C#類繼承自泛型集合,需要的朋友可以參考下
    2024-08-08
  • C#向Word文檔中添加內(nèi)容控件的方法示例

    C#向Word文檔中添加內(nèi)容控件的方法示例

    這篇文章主要給大家介紹了C#向Word文檔中添加內(nèi)容控件的方法,文中對各種不同控件的添加方法分別進(jìn)行了介紹,如組合框、文本、圖片、日期選取器及下拉列表等內(nèi)容控件,都給出了詳細(xì)的示例代碼,有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • C#序列化成XML注意細(xì)節(jié)

    C#序列化成XML注意細(xì)節(jié)

    最常用的序列化是把某個類序列化成二進(jìn)制文件.但有時我們也會把類序列化成xml文件,需要的朋友可以參考下
    2012-11-11
  • C#基于純數(shù)學(xué)方法遞歸實(shí)現(xiàn)貨幣數(shù)字轉(zhuǎn)換中文功能詳解

    C#基于純數(shù)學(xué)方法遞歸實(shí)現(xiàn)貨幣數(shù)字轉(zhuǎn)換中文功能詳解

    這篇文章主要介紹了C#基于純數(shù)學(xué)方法遞歸實(shí)現(xiàn)貨幣數(shù)字轉(zhuǎn)換中文功能,涉及C#針對字符串的遍歷、轉(zhuǎn)換與數(shù)學(xué)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-02-02
  • C#如何將Excel轉(zhuǎn)換為PDF

    C#如何將Excel轉(zhuǎn)換為PDF

    這篇文章主要介紹了C#如何將Excel轉(zhuǎn)換為PDF問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C#使用對象序列化類庫MessasgePack

    C#使用對象序列化類庫MessasgePack

    這篇文章介紹了C#使用對象序列化類庫MessasgePack的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 用C#縮小照片上傳到各種空間的具體方法

    用C#縮小照片上傳到各種空間的具體方法

    這篇文章介紹了用C#縮小照片的具體方法,有需要的朋友可以參考一下
    2013-09-09

最新評論

新竹市| 武清区| 德清县| 思南县| 和平区| 鄂尔多斯市| 柳林县| 津南区| 西平县| 丹寨县| 长乐市| 清镇市| 莆田市| 栾川县| 六安市| 临沭县| 丰台区| 会理县| 搜索| 子洲县| 什邡市| 日喀则市| 弥勒县| 揭东县| 安图县| 新民市| 河津市| 江口县| 临邑县| 通山县| 会东县| 白城市| 隆德县| 宜兴市| 鹤庆县| 博乐市| 华宁县| 比如县| 开原市| 枝江市| 凌海市|