当前位置:  编程技术>.net/c#/asp.net

关于C#基础知识回顾--反射(二)

    来源: 互联网  发布时间:2014-10-22

    本文导语:  使用反射调用方法:一旦知道一个类型所支持的方法,就可以对方法进行调用。调用时,需使用包含在MethodInfo中的Invoke()方法。调用形式:object Invoke(object ob, object[] args) 这里ob是一个对象引用,将调用它所指向的对象...

使用反射调用方法:
一旦知道一个类型所支持的方法,就可以对方法进行调用。调用时,需使用包含在
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(10, 20);
            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[0].ParameterType == typeof(int))
                {
                    Console.Write("Set(int,int)  ");
                    object[] args = new object[2];
                    args[0] = 9;
                    args[1] = 18;
                    m.Invoke(reflectOb, args);
                }
                else if (m.Name == "Set" && pi[0].ParameterType == typeof(double))
                {
                    Console.Write("Set(double,double)  ");
                    object[] args = new object[2];
                    args[0] = 2.34;
                    args[1] = 13.56;
                    m.Invoke(reflectOb, args);
                }
                else if (m.Name.CompareTo("Sum") == 0) {
                    Console.Write("Sum() ");
                    val = (int)m.Invoke(reflectOb, null);
                    Console.WriteLine("Sum is {0}",val);
                }
                else if(m.Name.CompareTo("IsBetween")==0)
                {
                    object[] args = new object[1];
                    args[0] = 17;
                    if ((bool)m.Invoke(reflectOb, args))
                    {
                        Console.WriteLine("{0}在x和y之间",args[0]);
                    }
                }
                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);
    }
}

运行结果如下:



    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python异常处理基础知识
  • 看Linux源代码需要什么样的基础知识?
  • HTML 基础知识教程及代码实例
  • 请问哪里有 《JAVA核心技术--基础知识》的电子书下载,谢谢!
  • 计算机底层开发需要哪些基础知识
  • 请问要想开发嵌入式Linux系统的驱动程序需要哪些基础知识??
  • 请教RMI基础知识,谢谢!
  • Oracle相关基础知识教程集锦
  • 想快速了解一下Linux基础知识。请前辈们指点迷津!
  • 请问谁有《java2核心技术 卷I:基础知识》书中例子的源代码?急需!!!
  • 关于《java2核心技术卷I:基础知识》 这本书中例子在jcreator2.5运行的问题.
  • 谁能给我《Java 2 核心技术 卷I:基础知识》的源代码,本人的随书光盘丢了,谢谢了!急
  • 完全看懂unix环境高级编程(w.richard.stevens)需要哪些基础知识?
  • 高分求教基础知识:大家谁知道哪个学习哪个版本UNIX好,在微机上怎么安装?可以下载安装程序吗?
  • 请教:在FEDORA CORE 7下做B/S模式的WEB应用开发都需要掌握哪些与LINUX有关的基础知识?
  • SQL学习笔记一SQL基础知识
  • 基础知识:Oracle数据库的启动方式
  • 上哪去找corejava?java2核心技术(卷Ⅰ:基础知识)配套光盘的corejava可以吗?若可以该如何设置?
  • JSP如何着手(一点基础知识都没有)?
  • 学习Java是从基础知识开始学习好还是直接学习JBuilder好?
  • signal()基础知识,<<apue>>上的程序疑问


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3