LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# 反射 Reflection 進(jìn)階

admin
2024年3月30日 23:55 本文熱度 742

反射是C#編程中的一個(gè)重要特性,它允許程序在運(yùn)行時(shí)獲取和操作對(duì)象的信息,而無需事先創(chuàng)建對(duì)象或者指定對(duì)象的具體實(shí)現(xiàn)。通過反射,程序可以動(dòng)態(tài)地創(chuàng)建、獲取、修改和刪除對(duì)象,從而實(shí)現(xiàn)更加靈活和強(qiáng)大的編程能力。

反射的實(shí)現(xiàn)依賴于程序運(yùn)行時(shí)的環(huán)境,其中包括.NET框架中的類型信息和字段、方法、屬性等信息。在C#中,程序可以通過System.Reflection命名空間中的類和接口來訪問和操作這些信息。例如,使用Type類可以獲取指定類型的類名、方法名、字段名等信息;使用MethodInfo類可以獲取指定方法的方法名、參數(shù)類型、返回值類型等信息;使用FieldInfo類可以獲取指定字段的字段名、數(shù)據(jù)類型、訪問權(quán)限等信息。

正文


通過Type創(chuàng)建一個(gè)類的實(shí)例

做一個(gè)基礎(chǔ)類Machine

public class Machine

{

    public string Name { get; set; }

    public string Location { get; set; }


    public decimal Amount = 1;


    public Machine()

    {


    }


    public Machine(string name, string location)

    {

        Name = name;

        Location = location;

    }


    public bool Run()

    {

        MessageBox.Show(this.Name+" "+"Run" + DateTime.Now.ToString());

        return true;

    }


    public void Stop()

    {

        MessageBox.Show(this.Name + " " + "Stop" + DateTime.Now.ToString());

    }

}

實(shí)例化這個(gè)類

private void btnCreateClass_Click(object sender, EventArgs e)

{

    Type t = Type.GetType("s77.Machine");

    //構(gòu)造器的參數(shù)

    object[] args = new object[] { "設(shè)備2", "北京", 9000 };

    //創(chuàng)建對(duì)象

    object obj =Activator.CreateInstance(t,new object[] {"設(shè)備2","北京"});

    //獲取方法的信息

    MethodInfo method = t.GetMethod("Run");

    //調(diào)用方法的一些標(biāo)志位,這里的含義是Public并且是實(shí)例方法,這也是默認(rèn)的值

    BindingFlags flag = BindingFlags.Public | BindingFlags.Instance;

    method.Invoke(obj,new object[] { });    

}

動(dòng)態(tài)創(chuàng)建一個(gè)委托

調(diào)整一個(gè)Machine 類

delegate string DeleStatus(string name);

public class Machine

{

    public string Name { get; set; }

    public string Location { get; set; }

    public decimal Amount = 1;


    public Machine()

    {


    }


    public Machine(string name, string location)

    {

        Name = name;

        Location = location;

    }


    public bool Run()

    {

        MessageBox.Show(this.Name+" "+"Run" + DateTime.Now.ToString());

        return true;

    }


    public void Stop()

    {

        MessageBox.Show(this.Name + " " + "Stop" + DateTime.Now.ToString());

    }


    public string Status(string name)

    {

        return name+" OK";

    }

}

調(diào)用

private void btnCreateDelegate_Click(object sender, EventArgs e){
    Type t = Type.GetType("s77.DeleStatus");//取得委托Type
    DeleStatus method = (DeleStatus)Delegate.CreateDelegate(t, machine, "Status");//創(chuàng)建委托
    string ret = method("設(shè)備");
    MessageBox.Show(ret);
}


該文章在 2024/3/30 23:56:16 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
思思热免费在线精品视频 | 中中文字幕亚洲无线码 | 日韩精品第一页 | 亚洲欧美另类在线 | 色青青久久影视 | 午夜福利亚洲国产精品 |