C# 反射

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace LearnReflect
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 给字段赋值
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string path = AppDomain.CurrentDomain.BaseDirectory + "\\InterfaceDLL.dll";
            Assembly ass = Assembly.LoadFrom(path);
            Type[] t = ass.GetTypes();

            //创建对象
            object o = Activator.CreateInstance(t[0]);

            FieldInfo fi = t[0].GetField("PeopleName");
            fi.SetValue(o, "黄刚");
            MessageBox.Show( o.ToString());
            
        }

       /// <summary>
       /// 获取全部字段
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
        private void btn_field_Click(object sender, EventArgs e)
        {
            list_field.Items.Clear();
            string path = AppDomain.CurrentDomain.BaseDirectory + "\\InterfaceDLL.dll";
            Assembly ass = Assembly.LoadFrom(path);
            Type[] t = ass.GetTypes();
            FieldInfo[] fields = t[0].GetFields();
            foreach (FieldInfo item in fields)
            {
                list_field.Items.Add(item.Name);
            }
        }

        /// <summary>
        /// 获取全部属性
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_allproperties_Click(object sender, EventArgs e)
        {

            list_properties.Items.Clear();
            string path = AppDomain.CurrentDomain.BaseDirectory + "\\InterfaceDLL.dll";
            Assembly ass = Assembly.LoadFrom(path);
            Type[] t = ass.GetTypes();
            PropertyInfo[] properties = t[0].GetProperties();
            foreach (PropertyInfo item in properties)
            {
                list_properties.Items.Add(item.Name);
            }
        }

        /// <summary>
        /// 获取全部方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_AllMethod_Click(object sender, EventArgs e)
        {

            list_Method.Items.Clear();
            string path = AppDomain.CurrentDomain.BaseDirectory + "\\InterfaceDLL.dll";
            Assembly ass = Assembly.LoadFrom(path);
            Type[] t = ass.GetTypes();
            MethodInfo[] methods = t[0].GetMethods();
            foreach (MethodInfo item in methods)
            {
                list_Method.Items.Add(item.Name);
            }
            list_Method.Items.Add("本类方法");
            MethodInfo[] methodsDeclare = t[0].GetMethods(BindingFlags.Instance);
            foreach (MethodInfo item in methodsDeclare)
            {
                list_Method.Items.Add(item.Name);
            }

        }
       /// <summary>
       /// 调用方法
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            string path = AppDomain.CurrentDomain.BaseDirectory + "\\InterfaceDLL.dll";
            Assembly ass = Assembly.LoadFrom(path);
            Type[] t = ass.GetTypes();
    
            MethodInfo getData = t[0].GetMethod("GetVisitData2");
            MethodInfo getResult = t[0].GetMethod("GetResult");
            object o = Activator.CreateInstance(t[0]);
       
            object[] para = {"420583199409271517"};
          
           
          // MessageBox.Show( getResult.Invoke(o,para).ToString());  //调用成功
           DataTable dt = getData.Invoke(o,para) as DataTable;  //调用成功
          
        }

        /// <summary>
        /// 设置属性值
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_SetproperValue_Click(object sender, EventArgs e)
        {
            string path = AppDomain.CurrentDomain.BaseDirectory + "\\InterfaceDLL.dll";
            Assembly ass = Assembly.LoadFrom(path);
            Type[] t = ass.GetTypes();


            object o = Activator.CreateInstance(t[0]);

            PropertyInfo pro = t[0].GetProperty("City");
            pro.SetValue(o, "惠州");
            MessageBox.Show(o.ToString());
        }

        /// <summary>
        /// 获取所有构造方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            string path = AppDomain.CurrentDomain.BaseDirectory + "\\InterfaceDLL.dll";
            Assembly ass = Assembly.LoadFrom(path);
            Type[] t = ass.GetTypes();

            ConstructorInfo[] construces = t[0].GetConstructors();
            foreach (ConstructorInfo item in construces)
            {
                //list_construc.Items.Add(item.Name);

                ParameterInfo[] ps = item.GetParameters();    //取出每个构造函数的所有参数
                foreach (ParameterInfo pi in ps)   //遍历并打印所该构造函数的所有参数
                {
                    list_construc.Items.Add(pi.ParameterType.ToString() + " " + pi.Name + ",");
                }
            }
        }
        /// <summary>
        /// 调用构造函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            string path = AppDomain.CurrentDomain.BaseDirectory + "\\InterfaceDLL.dll";
            Assembly ass = Assembly.LoadFrom(path);
            Type[] t = ass.GetTypes();
            object[] para = { "29"};
            object o = Activator.CreateInstance(t[0],para);
            MessageBox.Show(o.ToString());
        }
    }
}
反射

InterfaceData.dll下面有2个类,分别为OAVisitData,SQLHelper ,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;

namespace InterfaceData
{
   public class OAVisitData
    {

        private string _IDCard;

        public string IDCard
        {
            get { return _IDCard; }
            set { _IDCard = value; }
        }


        private string _City;

        public string City
        {
            get { return _City; }
            set { _City = value; }
        }


        public string PeopleName;

        public string age;

       public OAVisitData()
       {

       }
       public OAVisitData( string age)
       {
           this.age = age;
       }

       public override string ToString()
       {
           return IDCard + PeopleName + "城市:" + City + "年龄:" + age;
       }
       /// <summary>
       /// 获取OA访问信息
       /// </summary>
       /// <returns></returns>
       public static DataTable GetVisitData(string IDCard)
       {
           string sql = string.Format(@"select top 1 a.CardNO,a.VisitorName,b.到访区域 as VisitArea,
a.TelNO as VisitPhone,e.Emp_Name as ReceptPerson,b.申请人部门 as ReceptDepart ,b.接待人电话 as ReceptPhone,
b.来访原因 as Reason,b.来访人单位 as VisitCompany,
b.访问开始时间 as visitDateStart,b.访问结束时间 as visitDateEnd  from NVT_Visitor_Dtl a
left join H3Cloud.dbo.I_NVT办公流程_NVT来访登记单 b on  b.FlowGuid = a.Sub_BillID
left join H3Cloud.dbo.OT_User u on u.objectid = b.接待人员
left join HR_Employee e on e.Emp_No = u.Description
WHERE a.CardNO = '{0}'
and getdate() BETWEEN B.访问开始时间 AND b.访问结束时间  order by B.访问开始时间", IDCard);
           DataTable dt = SQLHelper.ExecuteTable(CommandType.Text,sql,null);
           return dt;
       }

       public  DataTable GetVisitData2(string IDCard)
       {
           string sql = string.Format(@"select top 1 a.CardNO,a.VisitorName,b.到访区域 as VisitArea,
a.TelNO as VisitPhone,e.Emp_Name as ReceptPerson,b.申请人部门 as ReceptDepart ,b.接待人电话 as ReceptPhone,
b.来访原因 as Reason,b.来访人单位 as VisitCompany,
b.访问开始时间 as visitDateStart,b.访问结束时间 as visitDateEnd  from NVT_Visitor_Dtl a
left join H3Cloud.dbo.I_NVT办公流程_NVT来访登记单 b on  b.FlowGuid = a.Sub_BillID
left join H3Cloud.dbo.OT_User u on u.objectid = b.接待人员
left join HR_Employee e on e.Emp_No = u.Description
WHERE a.CardNO = '{0}'
and getdate() BETWEEN B.访问开始时间 AND b.访问结束时间  order by B.访问开始时间", IDCard);
           DataTable dt = SQLHelper.ExecuteTable(CommandType.Text, sql, null);
           return dt;
       }

       public string GetResult(string mm)
       {
           return mm;
       }

       


    }
}
OAVisitData

 CSDN地址:https://download.csdn.net/my

posted @ 2019-06-06 20:37  古道子  阅读(355)  评论(0)    收藏  举报