第15章 .NET中的反射

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            //TestClass.ShowMsg();
            //TestClass.ShowMsg(new Message());

            //Assembly asm = Assembly.GetExecutingAssembly();
            //Object obj=asm.CreateInstance("ConsoleApplication2.Calculator",true);
            //Calculator cal=(Calculator)obj;

            //Object[] parameters = new Object[2] { 3, 5 };
            //Object obj1 = asm.CreateInstance("ConsoleApplication2.Calculator", true, BindingFlags.Default, null, parameters, null, null);
            //Calculator cal = (Calculator)obj1;

            //Type t = typeof(Calculator);
            //Calculator cal = new Calculator(3, 5);
            //int result = (int)t.InvokeMember("Add", BindingFlags.InvokeMethod, null, cal, null);
            //Console.WriteLine("result:" + result);

            //Type t = typeof(Calculator);
            //Object[] parameters = new Object[2] { 3, 5 };
            //t.InvokeMember("Add", BindingFlags.InvokeMethod, null, t, parameters);

            //Type t = typeof(Calculator);
            //Calculator cal = new Calculator(3, 5);
            //MethodInfo mi = t.GetMethod("Add", BindingFlags.Public | BindingFlags.Instance);
            //mi.Invoke(cal, null);

            //Type t = typeof(Calculator);
            //Object[] parameters = new Object[2] { 6, 9 };
            //MethodInfo mi = t.GetMethod("Add", BindingFlags.Public | BindingFlags.Static);
            //mi.Invoke(null, parameters);

            Console.ReadKey();
        }
    }

    public class Message { }

    public class TestClass
    {
        [Obsolete("请使用新方法")]
        public static void ShowMsg()
        {
            Console.WriteLine("旧MSG");
        }

        public static void ShowMsg(Message msg)
        {
            Console.WriteLine("新MSG");
        }
    }

    public class Calculator
    {
        private int x;
        private int y;
        public Calculator()
        {
            x = 0;
            y = 0;
            Console.WriteLine("Calculate()");
        }

        public Calculator(int x, int y)
        {
            this.x = x;
            this.y = y;
            Console.WriteLine("Calculate(int x, int y)");
        }

        public int Add()
        {
            int total = 0;
            total = x + y;
            Console.WriteLine("invoke instance method");
            Console.WriteLine(string.Format("{0}+{1}={2}", x, y, total));
            return total;
        }

        public static void Add(int x, int y)
        {
            int total = x + y;
            Console.WriteLine("invoke static method");
            Console.WriteLine(string.Format("{0}+{1}={2}", x, y, total));
        }
    }
}

时间: 2024-12-10 11:01:45

第15章 .NET中的反射的相关文章

.Net 中的反射(序章) - Part.1

引言 反射是.Net提供给我们的一件强力武器,尽管大多数情况下我们不常用到反射,尽管我们可能也不需要精通它,但对反射的使用作以初步了解在日后的开发中或许会有所帮助. 反射是一个庞大的话题,牵扯到的知识点也很多,包括程序集.自定义特性.泛型等,想要完全掌握它非常不易.本文仅仅对反射做一个概要介绍,关于它更精深的内容,需要在实践中逐渐掌握.本文将分为下面几个部分介绍.Net中的反射: 序章,我将通过一个例子来引出反射,获得对反射的第一印象. 反射初步.Type类.反射普通类型.(修改中,近期发布..

第15章 就不能换DB吗?—抽象工厂模式

由于抽象工厂在我们编程当中经常使用和常见,所有本篇文章对<大话设计模式>中的15章做了很详细的比较.通过一个Dao层可以更换访问任意数据库的例子来学习抽象工厂模式.例如:Dao层可以访问Sqlserver数据库,也可以访问Access数据库,当程序新增访问Oracle数据库时,无需修改现有代码,只需要添加访问Oracle相关的类就可以,实现了开闭原则.本篇文章的例子中每种数据库上都有User和Department表,我们Dao层对这两个表进行查询和插入操作. 最基本数据库访问 一下是访问Sql

设计模式@第15章:代理模式

第15章:代理模式 一.代理模式(Proxy) (一)代理模式的基本介绍 代理模式:为一个对象提供一个替身,以控制对这个对象(被代理的对象)的访问.即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 被代理的对象可以是远程对象.创建开销大的对象或需要安全控制的对象: 代理模式有不同的形式, 主要有三种 静态代理.动态代理 (JDK 代理.接口代理)和 Cglib 代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理

java第15章示例代码

import java.util.Scanner; /** * * @author asus第15章示例代码1 全桂群2017.4.9 * */public class Registter { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); String uname, pw

《Deep Learning》译文 第一章 前言(中) 神经网络的变迁与称谓的更迭

转载请注明出处! 第一章 前言(中) 1.1 本书适合哪些人阅读? 可以说本书的受众目标比较广泛,但是本书可能更适合于如下的两类人群,一类是学习过与机器学习相关课程的大学生们(本科生或者研究生),这包括了那些刚刚开始深度学习和AI研究的同学们:另一类是有机器学习或统计学背景的,想快速将深度学习应用在其产品或平台中的软件开发者们.深度学习早已被证实可以在许多软件应用中发挥光和热,比如:计算机视觉.语音与视频处理.自然语言理解.机器人学.生物学与化学.电视游戏.搜索引擎.在线广告与金融学等等. 为了

【Android】15.0 第15章 广播和通知&mdash;本章示例主界面

分类:C#.Android.VS2015: 创建日期:2016-02-28 一.简介 广播(Broadcast):其功能类似于收音机的广播,你只要调到那个台(只要在接收的类中注册了要接收的广播),就能收到这个台播放的信息. 通知(Notifications):安卓的服务组件(Android Service,后面章节再细讲)本来是在后台运行的,可是,用户可能希望关注某个后台任务当前正在执行的状态或者结果,此时就可以利用"通知"在前台告诉用户. 二.本章示例主界面 1.运行截图 这个截图也

敏捷软件开发:原则、模式与实践——第15章 状态图

第15章 状态图 在描述有限状态机(FSM)方面,UML提供个丰富的符合. 15.1 基础知识 下图是一个简单的状态迁移图(STD),该图描述了控制用户登录到系统的FSM.圆角矩形表状态.上层格间放置每个状态的名字.下层格间中放置的是一些特定动作,表示当进入或退出该状态时要做什么. 图中左上角的实心圆称为初始伪状态.FSM从这个伪状态开始,根据变迁规则进行转移. 15.1.1 特定事件 状态图的下层格间含有事件/动作对. 15.1.2 超状态 当许多状态以同样的方式响应某些同样的事件时,使用超状

第 15 章 组合模式【Composite Pattern】

以下内容出自:<<24种设计模式介绍与6大设计原则>> 大家在上学的时候应该都学过“数据结构”这门课程吧,还记得其中有一节叫“二叉树”吧,我们上 学那会儿这一章节是必考内容,左子树,右子树,什么先序遍历后序遍历什么,重点就是二叉树的的遍历,我还记得当时老师就说,考试的时候一定有二叉树的构建和遍历,现在想起来还是觉的老师是正确的,树状结果在实际项目应用的非常广泛. 咱就先说个最常见的例子,公司的人事管理就是一个典型的树状结构,你想想你公司的结构是不是这样: 老大,往下一层一层的管理,

C++ Primer Plus 第15章 友元、异常和其他

第15章 友元.异常和其他 1.友元不仅有友元函数,还能是友元类 还可以将类中的某一个成员函数指定为另一个类的友元 尽管友元被授予从外部访问私有部门的权限,单并不与面向对象编程思想相愽,相反,它们提高了公有接口的灵活性 2.类的成员函数作为其他类的友元,涉及到类的声明顺序. 还有一个函数作为两个类的友元 这方面内容看P607-611 3.嵌套类:在另一个类中声明的类被称为嵌套类 类嵌套与包含不一样.包含意味着将一个类对象作为另一个类的成员,而对类进行嵌套不创建类成员,而是定义了一种类型. 4.对