using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ReflactionTest.Infrance;//调用接口的引用
//using ReflactionTest.Sql;//调用实现接口的方法的引用
using System.Data;
using System.Reflection;//反射调用引用
using System.Configuration;
namespace Reflaction
{
public class Student
{
public int id { get; set; }
public string name { get; set; }
}
class Program
{
static void Main(string[] args)
{
Assembly assembly = Assembly.Load(ConfigurationManager.AppSettings["dll"]);//动态加载dall文件 此文件在app.con中配置
Type type = assembly.GetType(ConfigurationManager.AppSettings["lei"]);//动态加载dll文件下的方法 当反射创建一个实体类的时候 需要得到创建类的Type
object obj = Activator.CreateInstance(type);//利用反射创建实体类
IDBSqlHelp db = (IDBSqlHelp)obj;
db.Query();
//IDBSqlHelp db = new DBSqlHelp();//实例化接口 注意 应该是new 方法 而不是 接口
////db.HellWorld();
DataSet ds = db.Query();
if (ds.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
Console.WriteLine(ds.Tables[0].Rows[i]["StuAdress"].ToString());
}
}
foreach (Module m in assembly.GetModules())//获取反射的模块名
{
Console.WriteLine(m.Name);
}
foreach(MethodInfo mm in type.GetMethods())//获取反射下的所有方法名字
{
Console.WriteLine(mm.Name);
}
//MethodInfo methodinfo = type.GetMethod("Query");//从反射类型(此类型为 上面object创建的实体类)中获取方法(不带参数)
//DataSet dds = (DataSet)methodinfo.Invoke(obj, null);
//if (dds.Tables[0].Rows.Count > 0)
//{
// for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
// {
// Console.WriteLine(ds.Tables[0].Rows[i]["StuAdress"].ToString());
// }
//}
Console.WriteLine("***************获取id为1的值*************************");
//带参数的从反射类型中获取方法
MethodInfo methodinfoById = type.GetMethod("Query", new Type[] { typeof(int) });//查询query方法 并且这个方法有一个整形类型的参数里面的参数可以改变若为string则改为string以此类推
DataSet ddds=(DataSet)methodinfoById.Invoke(obj,new object[]{1});//调用obj下面的Query方法并且传入id=1的参数
if (ddds.Tables[0].Rows.Count > 0)
{
Console.WriteLine(ddds.Tables[0].Rows[0]["StuAdress"].ToString());
}
Console.WriteLine("***************获取反射对象的属性*************************");
Type StudentType = typeof(Student);//获取student的类型
object studentobj = Activator.CreateInstance(StudentType);//将student实例化
foreach (PropertyInfo p in StudentType.GetProperties())
{
Console.WriteLine(p.Name);
if (p.Name == "id")
{
p.SetValue(studentobj, 2);
}
if (p.Name == "name")
{
p.SetValue(studentobj, "张萨汗");//将获取到的反射对象的属性赋值
}
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ReflactionTest.Infrance;//调用接口的引用
//using ReflactionTest.Sql;//调用实现接口的方法的引用
using System.Data;
using System.Reflection;//反射调用引用
using System.Configuration;
namespace Reflaction
{
public class Student
{
public int id { get; set; }
public string name { get; set; }
}
class Program
{
static void Main(string[] args)
{
Assembly assembly = Assembly.Load(ConfigurationManager.AppSettings["dll"]);//动态加载dall文件 此文件在app.con中配置
Type type = assembly.GetType(ConfigurationManager.AppSettings["lei"]);//动态加载dll文件下的方法 当反射创建一个实体类的时候 需要得到创建类的Type
object obj = Activator.CreateInstance(type);//利用反射创建实体类
IDBSqlHelp db = (IDBSqlHelp)obj;
db.Query();
//IDBSqlHelp db = new DBSqlHelp();//实例化接口 注意 应该是new 方法 而不是 接口
////db.HellWorld();
DataSet ds = db.Query();
if (ds.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
Console.WriteLine(ds.Tables[0].Rows[i]["StuAdress"].ToString());
}
}
foreach (Module m in assembly.GetModules())//获取反射的模块名
{
Console.WriteLine(m.Name);
}
foreach(MethodInfo mm in type.GetMethods())//获取反射下的所有方法名字
{
Console.WriteLine(mm.Name);
}
//MethodInfo methodinfo = type.GetMethod("Query");//从反射类型(此类型为 上面object创建的实体类)中获取方法(不带参数)
//DataSet dds = (DataSet)methodinfo.Invoke(obj, null);
//if (dds.Tables[0].Rows.Count > 0)
//{
// for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
// {
// Console.WriteLine(ds.Tables[0].Rows[i]["StuAdress"].ToString());
// }
//}
Console.WriteLine("***************获取id为1的值*************************");
//带参数的从反射类型中获取方法
MethodInfo methodinfoById = type.GetMethod("Query", new Type[] { typeof(int) });//查询query方法 并且这个方法有一个整形类型的参数里面的参数可以改变若为string则改为string以此类推
DataSet ddds=(DataSet)methodinfoById.Invoke(obj,new object[]{1});//调用obj下面的Query方法并且传入id=1的参数
if (ddds.Tables[0].Rows.Count > 0)
{
Console.WriteLine(ddds.Tables[0].Rows[0]["StuAdress"].ToString());
}
Console.WriteLine("***************获取反射对象的属性*************************");
Type StudentType = typeof(Student);//获取student的类型
object studentobj = Activator.CreateInstance(StudentType);//将student实例化
foreach (PropertyInfo p in StudentType.GetProperties())
{
Console.WriteLine(p.Name);
if (p.Name == "id")
{
p.SetValue(studentobj, 2);
}
if (p.Name == "name")
{
p.SetValue(studentobj, "张萨汗");//将获取到的反射对象的属性赋值
}
}
}
}
}