假设1我有个类叫SortClass,类中有个BubbleSort(int[] array)用于给数组进行排序。

假设2我有个类叫SortT<T>,类中有个BubbleSort(T[] array)用于给数组进行排序。

现在我需要在控制台应用程序里通过反射调用BubbleSort方法为数组int[] array进行排序。

int[] array = new int[] { 1,7,98,165,4,8,97 };

假设1中由于类和方法不是泛型,实现起来比较简单,我就不多说了。具体代码如下:

需要反射的类的代码:

public class SortClass
    { //一个简单的冒泡排序
        public void BubbleSort(int[] array)
        {             int temp;
            for (int i = 0; i < array.Length - 1;i++ )
            {
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (array[j] > array[i])
                    {
                        temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }
                }
            }
        } 
    }

控制台中代码如下:
            Assembly assembly = Assembly.LoadFrom(@"C:\Documents and Settings\lh\桌面\反射例子\反射\Exception_01_反射\bin\Debug\SortClasses.dll");

Console.WriteLine(assembly.FullName);

Object oo = assembly.CreateInstance( "SortClasses.SortClass" );  //得到对象SortClasses为命名空间名

MethodInfo methodinfo = assembly.GetType( "SortClasses.SortClass").GetMethod( "BubbleSort" );   //得到方法

Object obj = methodinfo.Invoke(oo, new object[] { array });   //调用方法,给参数,得到结果

for (int i = 0; i < arrty.Length; i++)
            {
                Console.WriteLine(arrty[i]);
            }

假设2 需要反射的是一个泛型,百度谷歌了很久才找到我想要的答案。有些代码我也还很不理解。唉,还得继续研究理解下。

需要反射的类的代码:

public class SortT<T>where T:IComparable
    {
          public void BubbleSort(T[] array)
        { 
            T temp;
            for (int i = 0; i < array.Length - 1; i++)
            {
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (array[j].CompareTo(array[i])>0)
                    {
                        temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }
                }
            }
        }
    }

控制台中代码如下:

Assembly assembly = Assembly.LoadFrom( @"F:\HomeWork\C#\反射例子\反射\SortClasses\bin\Debug\SortClasses.dll" );

Console.WriteLine(assembly.FullName);

Type type = assembly.GetType( "SortClasses.SortT`1" );    //得到此类类型 注:(`1) 为占位符 不明确类型

Type t = type.MakeGenericType(typeof(int));  //指定泛型类

object obj = assembly.CreateInstance(t.FullName);  //创建其实例

MethodInfo mi = t.GetMethod( "BubbleSort" );    //调用方法

object [] argss = { array }; //参数

object returnValue = mi.Invoke(obj, argss); // 触发此方法
 
            for (int i = 0; i < array.Length; i++)
            {
                Console.WriteLine(array[i]);
            }

假设2中出自博客园中http://m.cnblogs.com/67560/1683466.html的代码

其它参考资料:http://msdn.microsoft.com/zh-cn/library/ms173128(VS.80).aspx

C#中反射泛型 CreateInstance的更多相关文章

  1. 在C++中反射调用.NET(三)

    在.NET与C++之间传输集合数据 上一篇<在C++中反射调用.NET(二)>中,我们尝试了反射调用一个返回DTO对象的.NET方法,今天来看看如何在.NET与C++之间传输集合数据. 使 ...

  2. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  3. 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  4. 转载:C#中的泛型

    泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...

  5. Java学习笔记之使用反射+泛型构建通用DAO

    PS:最近简单的学了学后台Servlet+JSP.也就只能学到这里了.没那么多精力去学SSH了,毕竟Android还有很多东西都没学完.. 学习内容: 1.如何使用反射+泛型构建通用DAO. 1.使用 ...

  6. C#中的泛型 【转】

    C#中的泛型 泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确 ...

  7. 【C# 反射泛型】

    C# 反射泛型 摘自:http://www.itwis.com/html/net/c/20110411/10175.html C#泛型反射和普通反射的区别,泛型反射和普通反射的区别就是泛型参数的处理上 ...

  8. C#中的泛型详解

    泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...

  9. Java 中的泛型详解-Java编程思想

    Java中的泛型参考了C++的模板,Java的界限是Java泛型的局限. 2.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的 ...

随机推荐

  1. Android-简单的sdcard文件浏览

    功能:能够浏览手机里面的文件夹和文件,代码灰常简单 先看布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...

  2. JavaScript AJAX stream 流式显示

      当使用AJAX进行信息交互的时候,如果服务器返回的信息比较大,那么相对于传送完成之后的统一显示,流式显示就比较友好了. 流式实现 原理就是设置定时器,定时的查看AJAX对象的状态并更新内容,如果传 ...

  3. 如何使用和了解ALTERA的IP核

    可以通过直接对IP核进行仿真验证,通过波形来分析IP核的功能和工作方式,以及各个寄存器之间的工作关系. 也可以通过查看用户指导手册来学习IP核,如下图.

  4. 0-N背包为题(动态规划算法)

    /****************0-N背包问题****************** * 有n个物体装入容量为c的背包,每一个物体有一个体积 * 和一个价值,所装入的物体体积之和不大于背包体积, * ...

  5. 宣讲ppt的技巧

    这是一个L运营商的项目,项目规模比较大,中兴的客户群体定位主要是电信运营商,运营商的项目做起来非常累,不是一般的小公司能玩的,一般项目要经过这几个过程,前期信息获得——技术交流引导——实验局测试——投 ...

  6. js之内置对象

    内置对象(Global和Math):JS程序在执行之前就已经存在,开发人员不必再取实例化的内置对象 下面对Global对象进行介绍一下,Math用的不多就不做介绍了 1.Global对象 Global ...

  7. cnblog评价以及团队软件的部分改善

    博客评价: 1.在word2003版本里的东西复制,不能直接直接粘贴到博客发表(发生过,大部分时候可以): 2.第一次使用的时候不知道复制过来的代码都是左对齐的,(代码排版和插入图片位置不明显): 3 ...

  8. Mac下的常用Shell命令

    今天介绍一下在Mac的终端中一些常用的Shell命令: 1.查看当前工作目录的完整路径 pwd (pwd的原意是:print work directiory,而不是密码password的意思,呵呵) ...

  9. CPU大小端判断

    两种方式:1.通过指针         2.通过联合体,联合体里面的数据都是按顺序存储的,而且不论联合体里面有多少数据类型,联合体长度是最长的数据类型的长度.不论初始化多少联合体里面的数据,有效的是最 ...

  10. sqlserver 查看锁表,解锁

    查看被锁表: 代码如下 复制代码 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName ...