在没使用反射之前,跨项目级的调用普遍的做法是项目级添加引用。
举例: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 反射的内容,更多相关内容请关注PHP中文网(www.php.cn)!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号