反射(3)反射应用:一个插件项目
2018-06-18 00:59:17来源:未知 阅读 ()
前面总结了反射的使用,这一篇结合一个完整的项目来总结下反射的实际应用。
项目结构
如下图:
定义插件接口
在项目ConsoleApplication6.IService中,定义了两个接口,Run代表行驶,Trun代表转向,如下代码:
1 namespace ConsoleApplication6.IService 2 { 3 /// <summary> 4 /// 创建一个车的接口 5 /// </summary> 6 public interface ICarService 7 { 8 /// <summary> 9 /// 行驶 10 /// </summary> 11 void Run(); 12 13 /// <summary> 14 /// 转向 15 /// </summary> 16 /// <param name="direction"></param> 17 void Turn(Direction direction); 18 19 } 20 21 public enum Direction 22 { 23 East, 24 Weast, 25 South, 26 North 27 } 28 }
插件程序实现
这里新建了两个项目分别实现插件程序,分别是ConsoleApplication6.Service.BMW和ConsoleApplication6.Service.BenZ,代码如下:
1 namespace ConsoleApplication6.Service.BMW 2 { 3 public class BMWCarService: ICarService 4 { 5 /// <summary> 6 /// 行驶 7 /// </summary> 8 public void Run() 9 { 10 Console.WriteLine("BMW Car Run!"); 11 } 12 13 /// <summary> 14 /// 转向 15 /// </summary> 16 /// <param name="direction"></param> 17 public void Turn(Direction direction) 18 { 19 Console.WriteLine(string.Format("BMW Car turn:{0}", direction.ToString())); 20 } 21 } 22 }
1 namespace ConsoleApplication6.Service.BenZ 2 { 3 public class BenZCarService: ICarService 4 { 5 /// <summary> 6 /// 行驶 7 /// </summary> 8 public void Run() 9 { 10 Console.WriteLine("BenZ Car Run!"); 11 } 12 13 /// <summary> 14 /// 转向 15 /// </summary> 16 /// <param name="direction"></param> 17 public void Turn(Direction direction) 18 { 19 Console.WriteLine(string.Format("BenZ Car turn:{0}", direction.ToString())); 20 } 21 } 22 }
运行程序
接下来我们就可以利用反射来运行这个插件程序了,如下代码:
1 namespace ConsoleApplication6 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 var assembly = Assembly.Load("ConsoleApplication6.Service.BMW");//也可以从配置文件中读取 8 var t = assembly.GetType("ConsoleApplication6.Service.BMW.BMWCarService");//也可以从配置文件中读取 9 10 //创建一辆车的实例 11 var obj = Activator.CreateInstance(t); 12 ICarService car = obj as BMWCarService; 13 if (car != null) 14 { 15 car.Run(); 16 car.Turn(Direction.East); 17 } 18 19 Console.ReadKey(); 20 } 21 } 22 }
这样,一个简单的插件程序就完成了,同时,如果我们开发类似的插件框架,就会大量使用到反射技术。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 一个工业级、跨平台、轻量级的 tcp 网络服务框架:gevent 2020-06-05
- 分享一个自己项目中用到的c++版的日志类(对初学者十分有用的 2020-05-22
- C++ 单独编译 2020-05-10
- 图 2020-05-02
- STL之map 2020-04-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash