国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C#】反射機(jī)制,動態(tài)加載類文件

這篇具有很好參考價(jià)值的文章主要介紹了【C#】反射機(jī)制,動態(tài)加載類文件。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

系列文章

【C#】編號生成器(定義單號規(guī)則、固定字符、流水號、業(yè)務(wù)單號)
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/129129787

【C#】日期范圍生成器(開始日期、結(jié)束日期)
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/129040663

【C#】組件化開發(fā),調(diào)用dll組件方法
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/129492112

【C#】數(shù)據(jù)實(shí)體類使用
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/128816638

【C#】單據(jù)審批流方案
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/128972545

【C#】條碼管理操作手冊
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/126589496

【C#】IIS平臺下,WebAPI發(fā)布及異常處理
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/126539836

【C#】代碼模板生成工具
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/126890673

【C#】MySQL數(shù)據(jù)庫導(dǎo)入工具(批量Excel插入)
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/126427323

【C#】簡單二維碼制作和打印工具
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/126884228

【C#】最全單據(jù)打印(打印模板、條形碼&二維碼、字體樣式、項(xiàng)目源碼)
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/129415723

【C#】Windows服務(wù)(Service)安裝及啟停方案
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/124053794

【C#】穿透Session隔離,服務(wù)調(diào)用外部程序(無窗體界面解決)
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/124053033

【C#】任務(wù)計(jì)劃實(shí)現(xiàn),使用Quartz類
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/123667723

【C#】源碼解析正則表達(dá)式
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/118337074

【C#】軟件版本和文件MD5記錄(XML操作)
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/112513871

【C#】測試網(wǎng)絡(luò)是否連通
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/110137288

【C#】根據(jù)名稱獲取編碼(Dictionary獲取key方法)
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/129816701

【C#】數(shù)據(jù)建模,你是使用DataTable還是List?
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/129792726

【C#】GridControl控件和數(shù)據(jù)集雙向綁定
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/129423755

【C#】GridControl動態(tài)更換DataSource,數(shù)據(jù)查詢異常處理
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/130305424

【C#】GridControl日期字段顯示時(shí)分秒
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/130718303

【C#】GridControl增加選擇列(不用二次點(diǎn)擊)
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/130763713

【C#】數(shù)據(jù)庫檢查工具(可跨庫訪問)
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/97172329

【C#】代碼解析–打印數(shù)據(jù)集
本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/131431829



前言

我能抽象出整個(gè)世界,但是我不能抽象你。 想讓你成為私有常量,這樣外部函數(shù)就無法訪問你。 又想讓你成為全局常量,這樣在我的整個(gè)生命周期都可以調(diào)用你。 可惜世上沒有這樣的常量,我也無法定義你,因?yàn)槟阍谖倚闹惺悄敲吹木唧w。

哈嘍大家好,本專欄為【項(xiàng)目實(shí)戰(zhàn)】專欄,有別于【底層庫】專欄,我們可以發(fā)現(xiàn)增加 了『問題描述』、『項(xiàng)目展示』章節(jié),十分符合項(xiàng)目開發(fā)流程,讓讀者更加清楚項(xiàng)目解決的問題、以及產(chǎn)品能夠達(dá)到的效果。本專欄收納項(xiàng)目開發(fā)過程的解決方案,是我項(xiàng)目開發(fā)相對成熟、可靠方法的提煉,我將這些問題的解決思路梳理,撰寫本文分享給大家,大家遇到類似問題,可按本文方案處理。

本專欄會持續(xù)更新,不斷完善,專欄文章關(guān)聯(lián)性較弱(文章之間依賴性較弱,沒有閱讀順序)。大家有任何問題,可以私信我。如果您對本專欄感興趣,歡迎關(guān)注吧,我將帶你用最簡潔的代碼,實(shí)現(xiàn)復(fù)雜的功能。

·提示:本專欄為項(xiàng)目實(shí)戰(zhàn)篇,未接觸項(xiàng)目開發(fā)的同學(xué)可能理解困難,不推薦閱讀。
【C#】反射機(jī)制,動態(tài)加載類文件


一、問題描述

今天遇到一個(gè)棘手問題,要排查出某個(gè)項(xiàng)目代碼中,所有Const單元中,所有常量定義和值,如下圖所示:
??【C#】反射機(jī)制,動態(tài)加載類文件
【C#】反射機(jī)制,動態(tài)加載類文件

二、解決方案

首先想到兩個(gè)方案:
①直接按行讀取源代碼,檢查 public const 后面的字符串進(jìn)行代碼行(以分號結(jié)尾為一行代碼)分割處理。
②采用“正則表達(dá)式”,分別匹配到“ct_”、“【SQL語句】”常量定義。
兩種方法其實(shí)大同小異,理論上可行,但是實(shí)際情況,開發(fā)人員“編碼尚不規(guī)范”,給排查算法增添幾分復(fù)雜度。比方說,SQL常量可能會換行、SQL常量還可能會拼接、有些常量中就會存在代碼結(jié)束符(;)等等問題。
【C#】反射機(jī)制,動態(tài)加載類文件
最終,采用反射機(jī)制,動態(tài)加載類文件。

三、軟件開發(fā)(源碼)

3.1 引入命名空間

using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.IO;
using System.Reflection;

3.2 主方法

        public static void Main(string[] args)
        {

            // 1.CSharpCodePrivoder
            CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();

            // 2.ICodeComplier
            ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();

            // 3.CompilerParameters
            CompilerParameters objCompilerParameters = new CompilerParameters();
            objCompilerParameters.ReferencedAssemblies.Add("System.dll");
            objCompilerParameters.GenerateExecutable = false;
            objCompilerParameters.GenerateInMemory = true;

            // 4.CompilerResults
            string l_strText = File.ReadAllText(@"D:\我的文檔\SharpDevelop Projects\fff\Const.cs");
            CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, l_strText);

            if (cr.Errors.HasErrors)
            {
                Console.WriteLine("編譯錯(cuò)誤:");
                foreach (CompilerError err in cr.Errors)
                {
                    Console.WriteLine(err.ErrorText);
                }
            }
            else
            {
                //5、CompiledAssembly
                Assembly objAssembly = cr.CompiledAssembly;
                Type t = objAssembly.GetType("Wesun.SW.M2012.Presentation.F201206.Const");
                FieldInfo[] fis = t.GetFields();  // 注意,這里不能有任何選項(xiàng),否則將無法獲取到const常量
                foreach (var fieldInfo in fis)
                {
                    Console.WriteLine(fieldInfo.Name + "=" + fieldInfo.GetRawConstantValue().ToString());
                }
            }
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }

3.3 常量單元

測試的類文件,利用反射讀取變量。

public static class Const
{
	public const string ct_StrPackMode ="select  *  from  T200_product_pack_mode  where (1=1) and product_no = ";
	public const string ct_FetchCustomer = "select * from V201_sale_order_receiver_F201208 where (1=1)";
	public const string ct_FetchProductProduceLine = "select * from TA05_product_produce_product where product_no={0} and sys_no = {1} and default_tag = 'T'" ;
	public const string ct_fetchSimpleCode="select '' as request_field4 ,'' as request_field4_name_cn union all Select simple_no as request_field4, simple_name_cn as request_field4_name_cn "
	+"From T200_simple_code where (1=1) AND (simple_type= 'RF4');";
	public const string ct_FetchRequestField = "select * from V200_product_code_default where (1=1) ";
}

四、項(xiàng)目展示

【C#】反射機(jī)制,動態(tài)加載類文件
【C#】反射機(jī)制,動態(tài)加載類文件

五、資源鏈接

本文于2020-08-21 17:47:56首次發(fā)布,現(xiàn)采用 MD編譯,重新排版整理。文章來源地址http://www.zghlxwxcb.cn/news/detail-508167.html

到了這里,關(guān)于【C#】反射機(jī)制,動態(tài)加載類文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 反射機(jī)制-體會反射的動態(tài)性案例(尚硅谷Java學(xué)習(xí)筆記)

    反射機(jī)制-體會反射的動態(tài)性案例(尚硅谷Java學(xué)習(xí)筆記)

    // 舉例01 public class Reflect{ } 案例:榨汁機(jī)榨水果汁,水果分別有果(com.reflect.Apple)、香蕉(Banana)、桔子(Orange)等。 效果如圖。 提示: 1、聲明(Fruit)水果接口,包含榨汁抽象方法: void squeeze(); /skwi:z/ 2、聲明榨汁機(jī)(Juicer),包含運(yùn)行方法: public void run(Fruit f),方法體中,調(diào)用f的榨汁方

    2024年02月11日
    瀏覽(30)
  • C# 通過反射以及動態(tài)調(diào)用方法

    C# 通過反射以及動態(tài)調(diào)用方法

    有時(shí)候需要通過反射以及動態(tài)調(diào)用的辦法去調(diào)用已知的實(shí)例的方法,感覺還是挺巧妙的。以下主要記錄通過反射以及動態(tài)的調(diào)用方法。 運(yùn)行結(jié)果如下圖所示: 總結(jié):在已知方法的情況下,還是動態(tài)調(diào)用比較方便,但是要注意異常處理,畢竟這屬于特殊情況,編譯執(zhí)行前不會

    2024年02月07日
    瀏覽(26)
  • C# 運(yùn)用(codeDom和反射技術(shù))動態(tài)編譯dll ,動態(tài)調(diào)用

    ? ? ? 在軟件運(yùn)用工程中,往往會根據(jù)各種各樣,花樣百出的需求來設(shè)計(jì)軟件,在最近的項(xiàng)目中無意中,我就遇到了一個(gè)需求,據(jù)說是,客戶要?jiǎng)討B(tài)編譯dll ,我“滴個(gè)乖乖”,這是要逆天??! 話不多說,直接來點(diǎn)干貨。 簡單分享一下個(gè)小demo: 1.運(yùn)用codeDom技術(shù)實(shí)現(xiàn)動態(tài)程序集

    2024年02月13日
    瀏覽(24)
  • Java反射機(jī)制,動態(tài)代理,hook以及在Retrofit源碼中的應(yīng)用

    Java反射機(jī)制,動態(tài)代理,hook以及在Retrofit源碼中的應(yīng)用

    1.反射的基礎(chǔ)知識: Java的反射機(jī)制是指在程序的運(yùn)行狀態(tài)中,可以構(gòu)造任意一個(gè)類的對象,可以了解任意一個(gè)對象所屬的類,可以了解任意一個(gè)類的成員變量和方法,可以調(diào)用任意一個(gè)對象的屬性和方法。這種動態(tài)獲取程序信息以及動態(tài)調(diào)用對象的功能稱為Java語言的反射機(jī)

    2024年02月13日
    瀏覽(17)
  • java語法(二)線程并發(fā)、Juit單元測試、反射機(jī)制、注解、動態(tài)代理、XML解析、JVM

    java語法(二)線程并發(fā)、Juit單元測試、反射機(jī)制、注解、動態(tài)代理、XML解析、JVM

    正則表達(dá)式驗(yàn)證網(wǎng)站 1、 ? :表示前邊這個(gè)字符可以出現(xiàn)0次或者1次。例如下邊 /used? 既可以匹配 use 也可以匹配 used 。 2、 * :匹配0個(gè)或者多個(gè)字符, * 號代表前邊這個(gè)字符可以出現(xiàn)0次或者多次。例如 /ab*c 可以匹配 ac、abc、abbbbc 3、 + :與 * 號不同的是, + 需要前面這個(gè)字符

    2024年02月06日
    瀏覽(25)
  • 【C#】實(shí)體類和DataTable之間相互轉(zhuǎn)換,實(shí)體反射動態(tài)遍歷列

    【C#】實(shí)體類和DataTable之間相互轉(zhuǎn)換,實(shí)體反射動態(tài)遍歷列

    在實(shí)際項(xiàng)目中,經(jīng)常會用到數(shù)據(jù)之間的相互轉(zhuǎn)換,序列化和反序列化就是常見場景。這里我們只簡單聊聊實(shí)體類和DataTable之間的相互轉(zhuǎn)換,可以用于不同業(yè)務(wù)場景使用。 要將C# DataTable 轉(zhuǎn)換為 Model 實(shí)體類,你可以使用反射來獲取 DataTable 的列和值,并通過實(shí)例化 Model 類來賦值

    2024年02月15日
    瀏覽(26)
  • 【創(chuàng)建型設(shè)計(jì)模式】C#設(shè)計(jì)模式之工廠模式,以及通過反射實(shí)現(xiàn)動態(tài)工廠。

    題目如下: 簡單工廠實(shí)現(xiàn): 上述代碼給出了抽象基類的基本定義,和泛型工廠的實(shí)現(xiàn)方式,以及調(diào)用方式。 值得注意的是 where T : Car, new() 這個(gè)條件: where T : Car, new() 是對泛型類型參數(shù) T 的約束。這個(gè)約束表明泛型類型參數(shù) T 必須滿足兩個(gè)條件: T 必須是 Car 類或者其派生類

    2024年02月11日
    瀏覽(19)
  • C#程序變量統(tǒng)一管理例子 - 開源研究系列文章

    C#程序變量統(tǒng)一管理例子 - 開源研究系列文章

    ???????? 今天講講關(guān)于C#應(yīng)用程序中使用到的變量的統(tǒng)一管理的代碼例子。 ???????? 我們知道,在C#里使用變量,除了private私有變量外,程序中使用到的公共變量就需要進(jìn)行統(tǒng)一的存放和管理。這里筆者使用到的公共變量管理庫劃分為:1)窗體;2)路徑;3)對象;所以筆

    2024年02月11日
    瀏覽(22)
  • 基于C#的窗體陰影效果方案 - 開源研究系列文章

    基于C#的窗體陰影效果方案 - 開源研究系列文章

    ???????? 最近在研究C#的Winform窗體的效果,上次介紹了窗體動畫效果的博文( 基于C#的無邊框窗體動畫效果的完美解決方案 - 開源研究系列文章 ),這次將窗體陰影效果的方案進(jìn)行一個(gè)介紹。 ???????? 找了一下度娘,具體窗體陰影效果就兩種方法:直接繪制和使用雙窗

    2024年02月14日
    瀏覽(24)
  • 個(gè)人用C#編寫的壁紙管理器 - 開源研究系列文章

    個(gè)人用C#編寫的壁紙管理器 - 開源研究系列文章

    今天介紹一下筆者自己用C#開發(fā)的一個(gè)小工具軟件:壁紙管理器。 開發(fā)這個(gè)小工具的初衷是因?yàn)閃indows操作系統(tǒng)提供的功能個(gè)人不滿意,而且現(xiàn)在閑著,所以就隨意寫了個(gè)代碼。如果對讀者有借鑒參考作用就更好了,能夠直接代碼段復(fù)用即可。這個(gè)壁紙管理器也比較簡單,基于

    2024年02月13日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包