举例:Client 类挪用 MysqlHelper 类的话
起首生成 MysqlHelper 项目,
然后在 Client 类中增添 MysqlHelper.dll,
接着在 Client 的要领中实例化,然后挪用要领。
运用反射后,能够越发天真设置,天真运用。
如上图,客户端要挪用数据库接口,数据库这里我们不明确写硬编码哪个数据库(MySQL, SQLServer, Oracle…)
这里先定义接口,假定该接口只要一个要领 Query() ,种种DB须要完成该接口,那末新增添的DB范例就不会影响到本来项目,如许就完成开放封闭准绳(对修正封闭,对扩大开放)。
接口类 DbHelper.cs
using System; namespace IHelper { public class DbHelper { public DbHelper() { Console.WriteLine("This is DbHelper construction"); } public virtual void Query() { Console.WriteLine("This is query method"); } } }
OracleDbHelper.cs
using System; using IHelper; namespace OracleHelper{ public class OracleDbHelper : DbHelper { public override void Query() { base.Query(); Console.WriteLine("This is query from OracleDbHelper"); } } }
MySqlDbHelper.cs
using System; using IHelper; namespace MySqlHelper{ public class MySqlDbHelper :DbHelper { public override void Query() { base.Query(); Console.WriteLine("This is query method from MySqlDbHelper"); } } }
Client 端 Program.cs 挪用:
将数据库协助类项目生成后的 dll、pdb 文件放到客户端 bin 目录下,然后在 App.config 内里增添设置,接着运用 Reflection 下的 Assembly 类去完成。
Program.cs
static void Main(string[] args){ string config = ConfigurationSettings.AppSettings["DbHelper"]; Assembly assembly = Assembly.Load(config.Split(',')[0]); Type typeHelper = assembly.GetType(config.Split(',')[1]); Object oHelper = Activator.CreateInstance(typeHelper); DbHelper dbHelper = (DbHelper) oHelper; dbHelper.Query(); Console.Read(); }
Client 端 App.config 设置:
<?xml version="1.0" encoding="utf-8" ?><configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <!--<add key="DbHelper" value="MySqlHelper,MySqlHelper.MySqlDbHelper"/>--> <add key="DbHelper" value="OracleHelper,OracleHelper.OracleDbHelper"/> </appSettings></configuration>
运转效果
以上就是C# Reflection 反射的内容,更多相关内容请关注ki4网(www.ki4.cn)!