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; } } }
CSDN地址:https://download.csdn.net/my

浙公网安备 33010602011771号