.NET简谈——跨进高级编程门槛的必经之路
我们继续C#基础知识的学习,这篇文章对前面基础知识学习的朋友有着举足轻重的作用;为了延续基础知识学习的热情,我编写了这篇特殊的文章。
本篇文章的中心是想借“.NET简谈反射(动态调用)”一文继续发挥下去,让朋友能一气呵成,到底反射能用在什么地方,究竟能起到多么高级的作用。
下面我就拿具体的例子讲解,不废话了请随我来;
1:必须具备的基础知识
C#接口:要想用反射进行高深的使用,必须先具备接口方面的基础,只有用接口了才能是系统真真的活起来。参考.NET简谈接口 一文;
C#委托、事件:在动态调用的过程中,我们难免要进行一些数据的传递,这样的传递是要用接口进行传递,我们不可能强耦合。参考.NET简谈事件与委托一文;
C#反射:这是最关键的一点,所有的东西都是围绕这个点在转,在我们下面的示例中,我们要动态的使用反射获取接口对象。参考.NET简谈反射(动态调用) 一文;
2:示例内容介绍
示例的主要内容是围绕着我们前面所学习的基础知识的做统一应用,以巩固我们的基础,使我们能在真正的项目中灵活运用,将自己提升到一个新的高度;
都知道接口是规范,都知道事件委托,都知道反射,但是我们都只是知道这些零零散散的知识点,我们怎么将这些小技术穿起来,形成坚实的代码结构;
示例要进行讲解的大概内容是这样的:我们定义一个接口,然后用对象去实现它,在我们使用的时候,我们动态的通过反射的去调用,但是反射的时候,我需要用接口进行确定唯一性,因为我们更本不知道谁实现了接口,所以接口的好处就出来了;
3:开始示例学习
定义接口:
using System;using System.Collections.Generic;using System.Text;namespace MainInterface{ /// <summary> /// 成功计算后的委托 /// </summary> /// <param name="count">返回计算后的值</param> public delegate void AddHandler(int count); /// <summary> /// 添加方法接口 /// </summary> public interface AddInterface { /// <summary> /// 计算结束后的事件 /// </summary> event AddHandler AddEndEvent; /// <summary> /// 计算两个数的和 /// </summary> /// <param name="i">number1</param> /// <param name="j">number2</param> void add(int i, int j); }} |
实现接口:
using System;using System.Collections.Generic;using System.Text;namespace TestDll{ public class Math : MainInterface.AddInterface { #region AddInterface 成员 public event MainInterface.AddHandler AddEndEvent; public void add(int i, int j) { AddEndEvent(i + j); } #endregion }} |
具体调用:
using System;using System.Collections.Generic;using System.Text;using System.Reflection;using System.Diagnostics;namespace Reflection{ class Program { static void Main(string[] args) { Assembly dll = Assembly.LoadFile(Environment.CurrentDirectory + "\\TestDll.dll"); foreach (Type type in dll.GetTypes()) { if (type.GetInterface("MainInterface.AddInterface") != null) { MainInterface.AddInterface add = Activator.CreateInstance(type, true) as MainInterface.AddInterface; add.AddEndEvent += new MainInterface.AddHandler(add_AddEndEvent); add.add(10, 20); } } } static void add_AddEndEvent(int count) { Console.WriteLine("Invoke Method:\n" + count.ToString()); Console.ReadLine(); } }} |
来自王清培老师文章 这也是我们进入框架开发、系统开发必经之路;
.NET简谈——跨进高级编程门槛的必经之路的更多相关文章
- Atitit. 高级软件工程师and 普通的区别 高级编程的门槛总结
Atitit. 高级软件工程师and 普通的区别 高级编程的门槛总结 1. 完备的知识体系 2 2. 编程理论/原理的掌握 2 1.1. 掌握常用的概念(ORM,IOC,AOP,event driv ...
- Atitit. 高级软件project师and 普通的差别 高级编程的门槛总结
Atitit. 高级软件project师and 普通的差别 高级编程的门槛总结 1. 完备的知识体系 2 2. 编程理论/原理的掌握 2 1.1. 掌握经常使用的概念(ORM,IOC.AOP,eve ...
- 关于unix环境高级编程、Linux程序设计两部书浅谈
unix环境高级编程的术语很多,概念内容,也很多,不过学习概念性质.标准规则类的东西,想必都是这样吧——需要进行拓展的内容很多. Linux程序设计,图文并茂,代码量够足,看起来,感觉难度还可以. l ...
- (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (八) 一起学 Unix 环境高级编程 (APUE) 之 信号
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- Hadoop学习笔记(7) ——高级编程
Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...
- Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级 ...
- Linux C高级编程——网络编程基础(1)
Linux高级编程--BSD socket的网络编程 宗旨:技术的学习是有限的,分享的精神是无限的. 一网络通信基础 TCP/IP协议簇基础:之所以称TCP/IP是一个协议簇,是由于TCP/IP包括T ...
- MPI简谈
MPI简谈 MPI是分布式内存系统,区别于OpenMP和Pthreads的共享内存系统.MPI是一种基于消息传递的并行编程技术,是如今最为广泛的并行程序开发方法. MPI前世今生 MPI(Messag ...
随机推荐
- 根据数据库表结构生成java类
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWrit ...
- DevExpress TreeList控件的复选框
作者:jiankunking 出处:http://blog.csdn.net/jiankunking TreeList控件能够同一时候显示树结构和其它数据列,即在一个列上建立父子关系展开或收缩,同一时 ...
- httputil用http获取请求的工具类
package com.xiaocan.demo.util; import java.io.IOException; import java.io.InputStream; import java.u ...
- 如何将MVC AREA中的某一个页设为起始页
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.Ignore ...
- JavaScript中Array方法总览
title: JavaScript中Array方法总览 toc: true date: 2018-10-13 12:48:14 push(x) 将x添加到数组最后,可添加多个值,返回数组长度.改变原数 ...
- MapReduce 程序:WordCount
- HD-ACM算法专攻系列(4)——A == B ?
题目描述: 源码: /**/ #include"iostream" #include"string" using namespace std; string S ...
- 【算法】单源最短路径和任意两点最短路径总结(补增:SPFA)
[Bellman-Ford算法] [算法]Bellman-Ford算法(单源最短路径问题)(判断负圈) 结构: #define MAX_V 10000 #define MAX_E 50000 int ...
- POJ 3255 Roadblocks (Dijkstra求最短路径的变形)(Dijkstra求次短路径)
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16425 Accepted: 5797 Descr ...
- Tomcat学习(一)——使用Eclipse绑定Tomcat并发布应用
1.下载Tomcat 官网地址:http://tomcat.apache.org/whichversion.html 2.目录结构 bin:脚本目录 启动脚本:startup.bat 停止脚本:shu ...