LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 反射 Reflection 进阶

admin
2024年3月30日 23:55 本文热度 38

反射是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-2024 ClickSun All Rights Reserved