使用反射调用方法:
一旦知道一个类型所支持的方法,就可以对方法进行调用。调用时,需使用包含在
 
MethodInfo中的Invoke()方法。调用形式:
 
object Invoke(object ob, object[] args)
 
这里ob是一个对象引用,将调用它所指向的对象上的方法。对于静态方法,ob必须为null。
 
所有需要传递给方法的参数都必须在args数组中指定。如果方法不需要参数,则args必须为null。
 
另外,数组args的元素数量参数必须等于参数的数量。Invoke()方法返回被调用方法的返回值。
 
要调用某个方法,只需在一个MethodInfo实例上调用Invoke(),该实例通过调用

GetMethods()

 
方法获得。请看事例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace Reflection
{
    class Program
    {
        static void Main(string[] args)
        {
           // Demo1();
            InvokeMethDemo();
            Console.ReadKey();
        }               static void InvokeMethDemo()
        {
            //获得MyClass的类型队形
            Type t = typeof(MyClass);             MyClass reflectOb = new MyClass(, );             Console.WriteLine("类名:{0}", t.Name);             Console.WriteLine("本类所提供的方法有:");             MethodInfo[] mi = t.GetMethods();             int val;             foreach (MethodInfo m in mi)
            {
                Console.WriteLine();
                              //显示参数
                ParameterInfo[] pi = m.GetParameters();                 if (m.Name == "Set" && pi[].ParameterType == typeof(int))
                {
                    Console.Write("Set(int,int)  ");
                    object[] args = new object[];                     args[] = ;
                    args[] = ;                     m.Invoke(reflectOb, args);
                }
                else if (m.Name == "Set" && pi[].ParameterType == typeof(double))
                {
                    Console.Write("Set(double,double)  ");
                    object[] args = new object[];                     args[] = 2.34;
                    args[] = 13.56;                     m.Invoke(reflectOb, args);
                }
                else if (m.Name.CompareTo("Sum") == ) {
                    Console.Write("Sum() ");
                    val = (int)m.Invoke(reflectOb, null);                     Console.WriteLine("Sum is {0}",val);
                }
                else if(m.Name.CompareTo("IsBetween")==)
                {
                    object[] args = new object[];                     args[] = ;                     if ((bool)m.Invoke(reflectOb, args))
                    {
                        Console.WriteLine("{0}在x和y之间",args[]);
                    }
                }
                Console.WriteLine();
            }
        }
    }
} class MyClass
{
    int x;
    int y;     public MyClass(int i, int j)
    {
        x = i;
        y = j;
    }     public int Sum()
    {
        return x + y;
    }     public bool IsBetween(int i)
    {
        if (x < i && i < y)
            return true;
        else
            return false;
    }     public void Set(int a, int b)
    {
        x = a;
        y = b;         Show();
    }     public void Set(double a, double b)
    {
        x = (int)a;
        y = (int)b;         Show();
    }     public void Show()
    {
        Console.WriteLine("x:{0},y:{1}", x, y);
    }
}
运行结果如下:

C#基础知识回顾-- 反射(2)的更多相关文章

  1. C#基础知识回顾-- 反射(3)

    C#基础知识回顾-- 反射(3)   获取Type对象的构造函数: 前一篇因为篇幅问题因为篇幅太短被移除首页,反射这一块还有一篇“怎样在程序集中使用反射”, 其他没有什么可以写的了,前两篇主要是铺垫, ...

  2. C#基础知识回顾-- 反射(1)

    C#基础知识回顾-- 反射(1)   反射(reflection)是一种允许用户获得类型信息的C#特性.术语“反射”源自于它的工作方式: Type对象映射它所代表的底层对象.对Type对象进行查询可以 ...

  3. C#基础知识回顾-- 反射(4)

    从程序集获得类型 先说点题外话,现在技术真的发展太快了.我这边还很多东西半生不熟 呢,那边又出现了好多有趣的新东西让你眼红不已.学还是不学这还真是 个问题.Node.js .bootstrap,我最近 ...

  4. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  5. C#基础知识回顾--线程传参

    C#基础知识回顾--线程传参 在不传递参数情况下,一般大家都使用ThreadStart代理来连接执行函数,ThreadStart委托接收的函数不能有参数, 也不能有返回值.如果希望传递参数给执行函数, ...

  6. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  7. Java基础知识回顾之七 ----- 总结篇

    前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...

  8. C++ 基础知识回顾总结

    一.前言 为啥要写这篇博客?答:之前学习的C和C++相关的知识,早就被自己忘到一边去了.但是,随着音视频的学习的不断深入,和C/C++打交道的次数越来越多,看代码是没问题的,但是真到自己操刀去写一些代 ...

  9. scrapy实战1,基础知识回顾和虚拟环境准备

        视频地址 https://coding.imooc.com/learn/list/92.html   一. 基础知识回顾     1. 正则表达式 1)贪婪匹配,非贪婪匹配 .*? 非贪婪 . ...

随机推荐

  1. 数据库-mysql语句-查

    复习: 列类型: 数值类型:   20   '20' tinyint / smallint / int / bigint float / double / decimal(m,d) bool (TRU ...

  2. mui.init方法配置

    mui框架将很多功能配置都集中在mui.init方法中,要使用某项功能,只需要在mui.init方法中完成对应参数配置即可,目前支持在mui.init方法中配置的功能包括: 创建子页面. 关闭页面. ...

  3. 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A

    牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...

  4. Python_day6

    Δ汉诺塔例子 # 定义三个全局的列表 la = [] lb = [] lc = [] stepn = 0 def create_hano(n): '''构建由n个圆盘组成的汉诺塔''' global ...

  5. nginx unit的初探

    安装介绍: https://www.oschina.net/p/nginx-unit 可以看到,unit还是很强大的,居然特么都支持go 还有python 在/etc/yum.repos.d/unit ...

  6. [ 10.03 ]CF每日一题系列—— 534B贪心

    Descripe: 贪心,贪在哪里呢…… 给你初始速度,结尾速度,行驶秒数,每秒速度可变化的范围,问你行驶秒数内最远可以行驶多少距离 Solution: 贪心,我是否加速,就是看剩下的时间能不能减到原 ...

  7. Django Template 进阶

    回顾: Variables {{ var }} {{ dict.key }} {{ var.attr }} {{ var.method }} {{ varindex }} Filter {{ list ...

  8. 如何使用Visual Studio 2017调试.net库源代码

    在Visual Studio 2017按如下步骤设置: 1.取消选中(工具 - >选项 - >调试 - >仅我的代码)复选框.2.确保设置了(工具 - >选项 - >调试 ...

  9. Trinity的分步运行

    当使用Trinity组装时,如果数据量过大,可以考虑使用--min_kmer_cov 2参数丢弃uniquely occurring kmer, 从而降低内存消耗 设置--no_distributed ...

  10. spring boot 集成 thymeleaf

    例如meta标签,低版本标签必须要闭合,高版本不用这么严格. pom文件引入高版本jar包如下,propertis里添加: