狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# 反射 Reflection 進階

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

反射是C#編程中的一個重要特性,它允許程序在運行時獲取和操作對象的信息,而無需事先創建對象或者指定對象的具體實現。通過反射,程序可以動態地創建、獲取、修改和刪除對象,從而實現更加靈活和強大的編程能力。

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

正文


通過Type創建一個類的實例

做一個基礎類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());

    }

}

實例化這個類

private void btnCreateClass_Click(object sender, EventArgs e)

{

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

    //構造器的參數

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

    //創建對象

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

    //獲取方法的信息

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

    //調用方法的一些標志位,這里的含義是Public并且是實例方法,這也是默認的值

    BindingFlags flag = BindingFlags.Public | BindingFlags.Instance;

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

}

動態創建一個委托

調整一個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";

    }

}

調用

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


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