反射机制
来源:http://www.7dit.com 作者:7dit 发布日期:2008-09-21 01:34:32 点击量:467
关于反射,我的理解是:主要通过反射,了解已编译的程序集中的结构,从而进行分析和使用。
命名空间:System.Reflection;
Assembly是反射的主要工具,通过调用他的方法和子方法,我们可以得到程序集中的类,类名,接口,类中的公有属性,公有方法,等一系列信息。
使用案例
另一种使用:
ssembly.LoadFile(filePath).GetName().Version.ToString(); //可以得到该程序集的版本,通过对比版本,我们可以实现软件版本的自动更新。
命名空间:System.Reflection;
Assembly是反射的主要工具,通过调用他的方法和子方法,我们可以得到程序集中的类,类名,接口,类中的公有属性,公有方法,等一系列信息。
使用案例
public bool ModifyRoom(Room room) //该方法主要将一个实体对象进行更新
{
List<string> sqlList = new List<string>();
try
{
DBConn.oleConn.Open();
Type t = Assembly.LoadFile(Application.StartupPath + @"\HotelManagerModels.dll").GetType("HotelManagerModels.Room"); //通过dll文件反射回程序集中的所有类,通过GetType取得我们所需要的某个命名空间下的类
PropertyInfo[] pList = t.GetProperties(); //获取所有属性
foreach (PropertyInfo p in pList)
{
if (p.Name != "RoomID")
{
string sql = string.Format("update Room set {0} = '{1}' where RoomID = {2}", p.Name, p.GetValue(room, null),room.RoomID); //通过遍历自动实体对象的每个属性生成SQL语名
sqlList.Add(sql);
}
}
int count = sqlList.Count;
foreach (string sql in sqlList) //遍历执行所有的SQL语名, 当我们无法使用存储过程或事务进行操作时,可以偿试用遍历的方式自动提交
{
OleDbCommand oc = new OleDbCommand(sql, DBConn.oleConn);
count -= oc.ExecuteNonQuery();
oc.Dispose();
}
if (count == 0)
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
finally
{
if (DBConn.oleConn != null && DBConn.oleConn.State == ConnectionState.Open)
{
DBConn.oleConn.Close();
}
}
}
{
List<string> sqlList = new List<string>();
try
{
DBConn.oleConn.Open();
Type t = Assembly.LoadFile(Application.StartupPath + @"\HotelManagerModels.dll").GetType("HotelManagerModels.Room"); //通过dll文件反射回程序集中的所有类,通过GetType取得我们所需要的某个命名空间下的类
PropertyInfo[] pList = t.GetProperties(); //获取所有属性
foreach (PropertyInfo p in pList)
{
if (p.Name != "RoomID")
{
string sql = string.Format("update Room set {0} = '{1}' where RoomID = {2}", p.Name, p.GetValue(room, null),room.RoomID); //通过遍历自动实体对象的每个属性生成SQL语名
sqlList.Add(sql);
}
}
int count = sqlList.Count;
foreach (string sql in sqlList) //遍历执行所有的SQL语名, 当我们无法使用存储过程或事务进行操作时,可以偿试用遍历的方式自动提交
{
OleDbCommand oc = new OleDbCommand(sql, DBConn.oleConn);
count -= oc.ExecuteNonQuery();
oc.Dispose();
}
if (count == 0)
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
finally
{
if (DBConn.oleConn != null && DBConn.oleConn.State == ConnectionState.Open)
{
DBConn.oleConn.Close();
}
}
}
另一种使用:
ssembly.LoadFile(filePath).GetName().Version.ToString(); //可以得到该程序集的版本,通过对比版本,我们可以实现软件版本的自动更新。
Copyright © 2005 奇点中文网--7dit.com
闽ICP备05001292号
闽ICP备05001292号
