C#中反射泛型 CreateInstance
假设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的更多相关文章
- 在C++中反射调用.NET(三)
在.NET与C++之间传输集合数据 上一篇<在C++中反射调用.NET(二)>中,我们尝试了反射调用一个返回DTO对象的.NET方法,今天来看看如何在.NET与C++之间传输集合数据. 使 ...
- 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- 转载:C#中的泛型
泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...
- Java学习笔记之使用反射+泛型构建通用DAO
PS:最近简单的学了学后台Servlet+JSP.也就只能学到这里了.没那么多精力去学SSH了,毕竟Android还有很多东西都没学完.. 学习内容: 1.如何使用反射+泛型构建通用DAO. 1.使用 ...
- C#中的泛型 【转】
C#中的泛型 泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确 ...
- 【C# 反射泛型】
C# 反射泛型 摘自:http://www.itwis.com/html/net/c/20110411/10175.html C#泛型反射和普通反射的区别,泛型反射和普通反射的区别就是泛型参数的处理上 ...
- C#中的泛型详解
泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...
- Java 中的泛型详解-Java编程思想
Java中的泛型参考了C++的模板,Java的界限是Java泛型的局限. 2.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的 ...
随机推荐
- 【笔记】WPF实现ViewPager引导界面效果及问题汇总
最近在开发项目的首次使用引导界面时,遇到了问题,引导界面类似于安卓手机ViewPager那样的效果,希望通过左右滑动手指来实现切换不同页面,其间伴随动画. 实现思路: 1.界面布局:新建一个UserC ...
- 1092. To Buy or Not to Buy (20)
Eva would like to make a string of beads with her favorite colors so she went to a small shop to buy ...
- 函数调用和inline作用
函数调用的开销: 函数被调用时,要有函数调用和返回.要保存当前程序上下文信息,以便函数调用完毕后返回原来的地方,继续执行程序.将函数的参数进行压栈.出栈,执行函数,函数调用完毕后释放内部变量占用的内存 ...
- 图片模糊度判断程序(C++、opencv)
//#include<opencv2\opencv.hpp> //using namespace cv; #include <opencv2/core/core.hpp> #i ...
- nodejs for centos配置
mongodb http://www.cnblogs.com/zhoulf/archive/2013/01/31/2887439.html nodejs http://zhaohe162.blog.1 ...
- Silverlight 调用 aspx 相关文件
private void Button_Click_1(object sender, RoutedEventArgs e) { WebClient wb = new WebClient(); wb.D ...
- Android编程: 调试方法
学习知识:Android的调试方法 ====调试方法==== 前提: IDE环境为Android Studio,熟悉LogCat,知道如何查看日志信息 工具: Android DDMS调试工具,一般点 ...
- 关于spring mvc MaxUploadSizeExceededException 死循环解决方案
当看到这文章的时候相信你现在应该遇到这样的问题了,我也是自己遇到了后来找到解决方案了记录下来,如果下次遇到就可以直接解决了. 至于为什么会出现这样的情况,可以看这篇文章:https://bz.apac ...
- HTML浅学入门---基础知识 (1)<基本规则>
HTML: 结构化文档,超文本标记语言 (一)四条基本规则 1.每个开始标记必须和结束标记配套使用.// <tag> </tag> 2.文档中必须包含唯一的打开和关闭标记 ...
- Linux 下的类似Windows下Everything的搜索工具
Windows NTFS有个超级快的搜索工具Everything,非常好用,Linux下有几个类似的命令行工具,太难用了,推荐一个catfish,类似Everything,有GUI,可以自定义一个快捷 ...