前面总结了反射的使用,这一篇结合一个完整的项目来总结下反射的实际应用。
项目结构
如下图:

定义插件接口
在项目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 Direction22 {23 East,24 Weast,25 South,26 North27 }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 }
这样,一个简单的插件程序就完成了,同时,如果我们开发类似的插件框架,就会大量使用到反射技术。
编辑推荐:
- 总结反射技术的实际应用。02-21
- VSCode轻松调试运行.Net 8.0 Web API项目的过程02-21
- 装箱与拆箱的实例教程02-21
- 用微信PC端dll库实现截图的实例代码02-21
- win10系统更新失败怎么办 解决win10新版本更新失败02-21
- ASP.NET MVC 遇到JSON循环调用的问题应该怎么解决?02-21
- Win10版Office无法打开解决办法02-21
- .Net MVC+Data Table实现分页+排序的实例教程02-21
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 总结反射技术的实际应用。
总结反射技术的实际应用。
26-02-21 - VSCode轻松调试运行.Net 8.0 Web API项目的过程
VSCode轻松调试运行.Net 8.0 Web API项目的过程
26-02-21 - 用微信PC端dll库实现截图的实例代码
用微信PC端dll库实现截图的实例代码
26-02-21 - win10系统更新失败怎么办 解决win10新版本更新失败
win10系统更新失败怎么办 解决win10新版本更新失败
26-02-21 - ASP.NET MVC 遇到JSON循环调用的问题应该怎么解决?
ASP.NET MVC 遇到JSON循环调用的问题应该怎么解决?
26-02-21 - Win10版Office无法打开解决办法
Win10版Office无法打开解决办法
26-02-21 - vs 中引用的问题--出现小叹号
vs 中引用的问题--出现小叹号
26-02-21 - C# 一些面试试题的实例教程
C# 一些面试试题的实例教程
26-02-21 - ASP.NET Core调用 Web API 备份数据库的详细过程
ASP.NET Core调用 Web API 备份数据库的详细过程
26-02-21 - 开发中常遇到的问题--日期格式化转换.
开发中常遇到的问题--日期格式化转换.
26-02-21
