谁能帮我解答一下有关使用反射技术的疑问 经常听人说反射,自己也用过反射工厂,不过都是做做换数据库之类的事情.想问一下,反射在解决哪些问题的时候用的很普遍,最好能举出实际的例子,谢谢各位了..... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 例如说,所有发票都有一个统一的“发票号”,但是如何通过发票号获得具体类型的发票对象呢?代码: 发票 p=Factory.Select("京A-1290"); p.审核();可能得到一个类型为“摆地摊专用发票”(我杜撰的)的对象,这个类型是从发票继承的,换一个发票号可能就返回另一个类型的发票对象,他们都多态地使用发票的“审核”方法定义。 再举一个的例子:using (DbConnection cnn = NewConn()){ DbDataAdapter adp = getTableAdapter(tableName); DbCommand cmd = adp.SelectCommand; cmd.Connection = cnn; DbParameter prm = DBFactory.CreateParameter(); prm.ParameterName = "@id"; prm.Value = Guid.Empty; cmd.Parameters.Add(prm); adp.Fill(_Cache2, tableName);}这个代码不论你使用什么数据库:Access、SQL Server、Oracle、FoxPro、SQLite等都可以使用,因为他们都有ADO.NET兼容的子类定义。通过在NewConn和DBFactory上切换为另外一种数据库,程序就移植到异种数据库上了,你的程序逻辑不需要修改,维护也极其方便。是否使用抽象和多态,是一个设计问题,没有经验的人会用最低级的类型去描述逻辑,似乎这样性能最高,而不去抽象。最后在说明一下反射。例如那个发票工厂方法,在一个数据库表中或者文件中保存发票号所对应的对象的AssemblyName和TypeFullName(例如数据库字段类型是NVarchar(100)),代码中就可以动态创建具体类型的对象。写那个程序的时候是要对“所有发票”一网打尽,设计程序的时候甚至还没有开发大部分具体的发票类型,具体的类型是在程序开发之后“将来”才扩展的,所以只能动态创建具体类型的对象。 举个DBFactory的实现例子: static private DbProviderFactory DBFactory { get { return new System.Data.SqlClient.SqlClientFactory(); } }切换为其他的数据库很容易,而程序的核心逻辑都是按照ADO.NET帮我们抽象出来的高层次类型去书写,例如DbDataAdapter、DbCommand 、DbParameter 等,因此具有稳固性和扩展性。 哦,上面的 DBFactory举的例子是从多态的角度。如果进一步就要用到反射,return后边是用System.Reflection.Assembly.Load(....).GetType(....).CreateInstance()就可以更加动态地创建对象了。 添加web服务引用问题 .net 表格导出word问题 给个一次插入多条记录的游标的例子. 请教 ===============用过母版的来看看!!!=============== 如何将hyperlink的text绑定到数据库的某个字段的值? 为了减少数据库.我用XML作为新闻评论.可否? 请教高手指教关于VS2003或者VS2005开发图表的方法 如何获得image值的长度? 谁有Visual Studio Tools for Office 的开发工具,能否发给我一份,研究一下! 请高手指点:连接超时的问题!!!在线等50分!!! 请问如何写程序向一个页面自动提交form表单里面的变量
p.审核();可能得到一个类型为“摆地摊专用发票”(我杜撰的)的对象,这个类型是从发票继承的,换一个发票号可能就返回另一个类型的发票对象,他们都多态地使用发票的“审核”方法定义。
{
DbDataAdapter adp = getTableAdapter(tableName);
DbCommand cmd = adp.SelectCommand;
cmd.Connection = cnn;
DbParameter prm = DBFactory.CreateParameter();
prm.ParameterName = "@id";
prm.Value = Guid.Empty;
cmd.Parameters.Add(prm);
adp.Fill(_Cache2, tableName);
}这个代码不论你使用什么数据库:Access、SQL Server、Oracle、FoxPro、SQLite等都可以使用,因为他们都有ADO.NET兼容的子类定义。通过在NewConn和DBFactory上切换为另外一种数据库,程序就移植到异种数据库上了,你的程序逻辑不需要修改,维护也极其方便。是否使用抽象和多态,是一个设计问题,没有经验的人会用最低级的类型去描述逻辑,似乎这样性能最高,而不去抽象。最后在说明一下反射。例如那个发票工厂方法,在一个数据库表中或者文件中保存发票号所对应的对象的AssemblyName和TypeFullName(例如数据库字段类型是NVarchar(100)),代码中就可以动态创建具体类型的对象。写那个程序的时候是要对“所有发票”一网打尽,设计程序的时候甚至还没有开发大部分具体的发票类型,具体的类型是在程序开发之后“将来”才扩展的,所以只能动态创建具体类型的对象。
{
get
{
return new System.Data.SqlClient.SqlClientFactory();
}
}切换为其他的数据库很容易,而程序的核心逻辑都是按照ADO.NET帮我们抽象出来的高层次类型去书写,例如DbDataAdapter、DbCommand 、DbParameter 等,因此具有稳固性和扩展性。