C# Reflection 反射

在没使用反射之前,跨项目级的调用普遍的做法是项目级添加引用。

举例:Client 类调用 MysqlHelper 类的话

首先生成 MysqlHelper 项目,

然后在 Client 类中添加 MysqlHelper.dll,

接着在 Client 的方法中实例化,然后调用方法。

使用反射后,可以更加灵活配置,灵活使用。

924.jpg

如上图,客户端要调用数据库接口,数据库这里我们不明确写硬编码哪一个数据库(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 配置:

                      <!---->      

运行结果

925.jpg

以上就是C# Reflection 反射的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432122.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 06:14:47
下一篇 2025年12月17日 06:15:02

相关推荐

发表回复

登录后才能评论
关注微信