关于泛型、反射的问题??

itymx 2009-05-14 04:14:36

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;

namespace fanshetest
{
public delegate void bb(string str);
public partial class Form1 : Form
{

System.Reflection.Assembly a;
System.Reflection.Assembly b;

public Form1()
{
InitializeComponent();
a = System.Reflection.Assembly.LoadFrom("Class1.DLL");
}

private void button1_Click(object sender, EventArgs e)
{
One();
}
//没有传参数,返回一个类型;
private void One()
{
//再另建一个项目,在项目中引用上面生成的ClassLibrary1.DLL
System.Type t = a.GetType("Class1.Class1");
//动态生成ClassLibrary1.Class类的实例
Object theObj = System.Activator.CreateInstance(t);
//参数信息,GetSum需要两个string参数
//System.Type[] paramTypes = new System.Type[2];
//paramTypes[0] = System.Type.GetType("System.String");
//paramTypes[1] = System.Type.GetType("System.String");
//System.Reflection.MethodInfo mi = t.GetMethod("aa", paramTypes);
System.Reflection.MethodInfo mi = t.GetMethod("bb");
//参数值
//Object[] parameters = new Object[2];
//parameters[0] = 3;
//parameters[1] = 4;

Object returnValue = mi.Invoke(theObj, null);
this.textBox1.Text = returnValue.ToString();
}
//没有返回值,调用的是直接执行函数
private void None_void()
{
//再另建一个项目,在项目中引用上面生成的ClassLibrary1.DLL
System.Type t = a.GetType("Class1.Class2");
//动态生成ClassLibrary1.Class类的实例
Object theObj = System.Activator.CreateInstance(t);
//参数信息,GetSum需要两个string参数
System.Type[] paramTypes = new System.Type[2];
//此处调用方法,如果有参数只需要在括号的后面加上"," 加上参数的type[]类型的参数
System.Reflection.MethodInfo mi = t.GetMethod("Mes");
Object returnValue = mi.Invoke(theObj, null);
}
//没有返回值,传出参数接收返回值;
private void Two()
{
Type t = a.GetType("Class1.Class1");
Object theObj = Activator.CreateInstance(t);
Type[] types=new Type[2];
types[0]=Type.GetType("System.Int32");
types[1]=Type.GetType("System.Int32");
Object[] obj=new Object[2];
obj[0]=2;
obj[1]=3;
MethodInfo mi = t.GetMethod("aa",types);
Object returnValue=mi.Invoke(theObj,obj);
this.textBox1.Text = returnValue.ToString();
}
//获取同一个命名空间的反射出值
private void Local()
{
Type t=Type.GetType("fanshetest1.Class1");
//创建一个 实例
Object theObj = Activator.CreateInstance(t);
Type[] types=new Type[2];
types[0]=Type.GetType("System.Int32");
types[1] = Type.GetType("System.Int32");
Object[] obj = new Object[2];
obj[0] = 2;
obj[1] = 3;
MethodInfo mi = t.GetMethod("aa",types);
Object returnValue = mi.Invoke(theObj,obj);
this.textBox1.Text = returnValue.ToString();
}
//获取出一个属性
private void attribute()
{
a = Assembly.LoadFrom("Class1.dll");
Type t = a.GetType("Class1.Class1");
t = Type.GetType("fanshetest1.Class1");
Object theObj = Activator.CreateInstance(t);
t.GetProperty("AB").SetValue(theObj,"a",null);
this.textBox1.Text = t.GetProperty("AB").GetValue(theObj, null).ToString();
}
//获取出静态的函数;
private void static_()
{
a = System.Reflection.Assembly.LoadFrom("Class1.dll");
Type t = a.GetType("Class1.Class1");
t = Type.GetType("fanshetest1.Class1");
//创建一个实例
Object theObj = Activator.CreateInstance(t);
//创建一个方法的实例
MethodInfo mi = t.GetMethod("cc");
Object returnValue = mi.Invoke(theObj, null);
this.textBox1.Text = returnValue.ToString();
}
//获取出变量;
private void variable()
{
a = Assembly.LoadFrom("Class1.dll");
Type t = a.GetType("Class1.Class1");
t = Type.GetType("fanshetest1.Class1");
Object theObj = Activator.CreateInstance(t);
MethodInfo mi = t.GetMethod("a");
t.GetField("a").SetValue(theObj,"a");
this.textBox1.Text = t.GetField("a").GetValue(theObj).ToString();
}
//获取出私有变量反射值;
private void private_()
{

}
//构造函数
private void gouzaohanshu()
{
Type t = a.GetType("Class1.Class1");
t = Type.GetType("fanshetest1.Class1");
//创建构造函数类型
Type[] structure_Type = new Type[1];
structure_Type[0] = Type.GetType("System.String");
//定义构造函数传参类型
Object[] structure_Obj = new Object[1];
structure_Obj[0] = "aa";
//创建一个 实例
Object theObj = Activator.CreateInstance(t,structure_Obj);
//MethodInfo structure_Mi = t.GetConstructor(structure_Type);
//MethodInfo structure_Mi = t.GetMethod("Class1", structure_Type);
//structure_Mi.Invoke(theObj, structure_Obj);

MethodInfo mi = t.GetMethod("a");
//t.GetField("a").SetValue(theObj, "a");
this.textBox1.Text = t.GetField("a").GetValue(theObj).ToString();
}
//调用事件
private void delegate_()
{

a = Assembly.LoadFrom("Class1.dll");
Type t = a.GetType("Class1.Class1");
Object theObj = Activator.CreateInstance(t);
//MethodInfo mi = t.GetMethod("event_Test");
//mi.Invoke(theObj, null);
//System.Reflection.Emit命名空间的类提供了一种特殊形式的反射,使您能够在运行时构造类型。反射也可用于创建称作类型浏览器的应用程序,它使用户能够选择类型,然后查看有关选定类型的信息。

//使用 EventInfo 来了解如下的类似信息:事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等;并添加或移除事件处理程序。
EventInfo ei = t.GetEvent("delet_Event",BindingFlags.CreateInstance|BindingFlags.Instance|BindingFlags.Public);
Type t1 = a.GetType("Class1.bb");

Delegate d = Delegate.CreateDelegate(t1, this, "TextShow");
ei.AddEventHandler(theObj, d);
Type[] typ=new Type[1];
typ[0]=Type.GetType("System.String");
Object[] obj = new Object[1];
obj[0] = "aaaa";
//使用MethodInfo了解以下信息:方法的名称、返回类型、参数、访问修饰符(如 public 或 private)和实现详细信息(如 abstract 或 virtual)等。使用 Type 的 GetMethods 或 GetMethod 方法来调用特定的方法。
MethodInfo mi = t.GetMethod("event_Test",typ);
mi.Invoke(theObj, obj);
}
private void TextShow(string str)
{
this.textBox1.Text = str;
}
}
}


关于泛型反射 小生这几天正在研究 不过研究的结果是觉得用一些别的方法也可以实现许多的功能,但为什么就非得用泛型、反射吗?
...全文
567 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
itymx 2009-12-07
  • 打赏
  • 举报
回复
难道大家都忙?
itymx 2009-12-07
  • 打赏
  • 举报
回复
有这样一个流程:我在前台用c#写的查询语句,访问的是SQL2005数据库,数据库现在大概有30万条数据了,有表和历史表两个表 每次查询都是查表和历史表的视图 请问有什么能优化一下查询速度吗,现在查询的时候都要超过30秒 每次查询都是按天查询的 请大侠们给小弟指点指点
itymx 2009-06-15
  • 打赏
  • 举报
回复
O(∩_∩)O谢谢
pdsnet 2009-06-11
  • 打赏
  • 举报
回复
给你顶下~
itymx 2009-06-11
  • 打赏
  • 举报
回复
兄弟们能加一下这个群吗 QQ:52993264 在这里可以交流交流编程心得和想法,有空的时候吹牛皮。我搞电子商务的 在北京
itymx 2009-06-11
  • 打赏
  • 举报
回复
应该是判断语句 吧
itymx 2009-06-11
  • 打赏
  • 举报
回复
bool c=a>b?true:false; 应该是判断吧
buller 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 itymx 的回复:]
两个整数怎样比较大小 不能用判断句
[/Quote]
int a=6;
int b=3;
bool c=a>b?true:false;
古龙老子 2009-06-04
  • 打赏
  • 举报
回复
ding
itymx 2009-06-04
  • 打赏
  • 举报
回复
两个整数怎样比较大小 不能用判断句
takeshe 2009-05-16
  • 打赏
  • 举报
回复
泛型用得最多
yh7272hy 2009-05-16
  • 打赏
  • 举报
回复
mark up
mengxj85 2009-05-16
  • 打赏
  • 举报
回复
帮顶
sforiz 2009-05-14
  • 打赏
  • 举报
回复
UP
itymx 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 itcrazyman 的回复:]
mark 帮顶
[/Quote]


同意 对这两种东西 就是他在对整个框架的时候非常的有用 就是咱们平常写的那些小例子 感觉用处不大 给予此 请兄台给点详细的见解吧 让小生也了解了解在何时该用此法
hmily821023 2009-05-14
  • 打赏
  • 举报
回复
关于泛型反射 小生这几天正在研究 不过研究的结果是觉得用一些别的方法也可以实现许多的功能,但为什么就非得用泛型、反射吗?
不是


应该是基于整个框架的考虑
目的应该是为了 易于扩展和维护

itcrazyman 2009-05-14
  • 打赏
  • 举报
回复
mark 帮顶
itymx 2009-05-14
  • 打赏
  • 举报
回复
有哪位高人请详细陈述一下(语言例子) 在下 感激不尽
anheizhizi 2009-05-14
  • 打赏
  • 举报
回复
当你不知道使用类型或多种类型共通的时候就可以用啊

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧