zoukankan      html  css  js  c++  java
  • .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: " + count.ToString());
     
                Console.ReadLine();
            }
        }
    }

    来自王清培老师文章 这也是我们进入框架开发、系统开发必经之路;

  • 相关阅读:
    poj2187 Beauty Contest 旋转卡壳
    2017/8/6 考试吐槽
    bzoj2618 凸多边形 半平面交
    cogs1600 奶牛冰壶 计算几何
    cogs896 圈奶牛 凸包
    cogs1743 忠诚 zkw
    BZOJ 3224 普通平衡树 平衡树的两种姿势:SBT,splay。01trie
    BZOJ 3196 二逼平衡树
    BZOJ 1901 Dynamic Rankings
    BZOJ 4325[NOIP2015]斗地主
  • 原文地址:https://www.cnblogs.com/randyzhuwei/p/4673654.html
Copyright © 2011-2022 走看看