c# 反射简单用法例子
2014-05-29 15:46
591 查看
闲来无事,看了下反射的实现,写了个小例子。
新建一个类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WfmReflection
{
class MyClass
{
public string m;
public void test() {
}
public int MyProperty { get; set; }
}
}
建一个类库
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
public class MyTest
{
private string _name;
private int _age;
public string name
{
get{return _name;}
set { _name = value; }
}
public int age
{
get { return _age; }
set { _age = value; }
}
public MyTest(string name, int age)
{
_age = age;
_name = name;
}
public string GetTestInfo()
{
return _name + ":" + _age.ToString();
}
}
}
winform实例:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace WfmReflection
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//获取类型信息
private void button1_Click(object sender, EventArgs e)
{
Type type = typeof(MyClass);
string strInfo = "";
strInfo = "类型名:" + type.Name;
strInfo += "\n\t" + "类全名:" + type.FullName;
strInfo += "\n\t" + "命名空间名:" + type.Namespace;
strInfo += "\n\t" + "程序集名:" + type.Assembly;
strInfo += "\n\t" + "模块名:" + type.Module;
strInfo += "\n\t" + "基类名:" + type.BaseType;
strInfo += "\n\t" + "是否类:" + type.IsClass;
strInfo += "\n\t" + "类的公共成员:";
MemberInfo[] memberInfos = type.GetMembers();//得到所有公共成员
foreach (var item in memberInfos)
{
strInfo += "\n\t" + string.Format("{0}:{1}", item.MemberType, item);
}
richTextBox1.Text = strInfo;
}
//获取程序集信息
private void button2_Click(object sender, EventArgs e)
{
string strInfo = "";
//获取当前执行代码的程序集
Assembly assem = Assembly.GetExecutingAssembly();
strInfo += "\n\t" + "程序集全名:" + assem.FullName;
strInfo += "\n\t" +"程序集的版本:" + assem.GetName().Version;
strInfo += "\n\t" +"程序集初始位置:" + assem.CodeBase;
strInfo += "\n\t" +"程序集位置:" + assem.Location;
strInfo += "\n\t" +"程序集入口:" + assem.EntryPoint;
Type[] types = assem.GetTypes();
strInfo += "\n\t" +"程序集下包含的类型:";
foreach (var item in types)
{
strInfo += "\n\t" +"类:" + item.Name;
}
richTextBox1.Text = strInfo;
}
//反射调用方法
private void button3_Click(object sender, EventArgs e)
{
System.Reflection.Assembly ass = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + "bin\\Test.dll"); //加载DLL
System.Type t = ass.GetType("Test.MyTest");//获得类型(命名空间中的类)
object o = System.Activator.CreateInstance(t,new object[] { "xiaoming", 19 });
System.Reflection.MethodInfo mi = t.GetMethod("GetTestInfo");//获得方法
string result=(string) mi.Invoke(o,new object[]{});//调用方法
richTextBox1.Text = result;
}
}
}
新建一个类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WfmReflection
{
class MyClass
{
public string m;
public void test() {
}
public int MyProperty { get; set; }
}
}
建一个类库
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
public class MyTest
{
private string _name;
private int _age;
public string name
{
get{return _name;}
set { _name = value; }
}
public int age
{
get { return _age; }
set { _age = value; }
}
public MyTest(string name, int age)
{
_age = age;
_name = name;
}
public string GetTestInfo()
{
return _name + ":" + _age.ToString();
}
}
}
winform实例:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace WfmReflection
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//获取类型信息
private void button1_Click(object sender, EventArgs e)
{
Type type = typeof(MyClass);
string strInfo = "";
strInfo = "类型名:" + type.Name;
strInfo += "\n\t" + "类全名:" + type.FullName;
strInfo += "\n\t" + "命名空间名:" + type.Namespace;
strInfo += "\n\t" + "程序集名:" + type.Assembly;
strInfo += "\n\t" + "模块名:" + type.Module;
strInfo += "\n\t" + "基类名:" + type.BaseType;
strInfo += "\n\t" + "是否类:" + type.IsClass;
strInfo += "\n\t" + "类的公共成员:";
MemberInfo[] memberInfos = type.GetMembers();//得到所有公共成员
foreach (var item in memberInfos)
{
strInfo += "\n\t" + string.Format("{0}:{1}", item.MemberType, item);
}
richTextBox1.Text = strInfo;
}
//获取程序集信息
private void button2_Click(object sender, EventArgs e)
{
string strInfo = "";
//获取当前执行代码的程序集
Assembly assem = Assembly.GetExecutingAssembly();
strInfo += "\n\t" + "程序集全名:" + assem.FullName;
strInfo += "\n\t" +"程序集的版本:" + assem.GetName().Version;
strInfo += "\n\t" +"程序集初始位置:" + assem.CodeBase;
strInfo += "\n\t" +"程序集位置:" + assem.Location;
strInfo += "\n\t" +"程序集入口:" + assem.EntryPoint;
Type[] types = assem.GetTypes();
strInfo += "\n\t" +"程序集下包含的类型:";
foreach (var item in types)
{
strInfo += "\n\t" +"类:" + item.Name;
}
richTextBox1.Text = strInfo;
}
//反射调用方法
private void button3_Click(object sender, EventArgs e)
{
System.Reflection.Assembly ass = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + "bin\\Test.dll"); //加载DLL
System.Type t = ass.GetType("Test.MyTest");//获得类型(命名空间中的类)
object o = System.Activator.CreateInstance(t,new object[] { "xiaoming", 19 });
System.Reflection.MethodInfo mi = t.GetMethod("GetTestInfo");//获得方法
string result=(string) mi.Invoke(o,new object[]{});//调用方法
richTextBox1.Text = result;
}
}
}
相关文章推荐
- c# 反射---简单小例子
- 【C#学习笔记】反射的简单用法
- 写一个简单的C#反射的例子(附有源码)
- C#反射-Assembly.Load、LoadFrom与LoadFile详细例子用法
- c# 反射---简单小例子
- 原创 导弹能否摧毁目标?一个简单的例子说明c# 中property(性质)的用法
- C#中This用法的简单小例子
- 反射(C#)简单用法
- C#反射简单例子
- c#反射用法例子
- C#多态的另一个简单的例子
- C#中导出数据到EXCEL的简单例子
- C# Remoting的一个简单例子
- 在 C# 平台中, 编写 Windows 服务的简单例子
- 反射原理的简单例子
- .net中使用反射的简单例子
- .net中使用反射的简单例子
- c#.net下简单的Ajax例子
- 一个演示 CAsyncSocket 用法的极简单的例子.
- 一个很简单的C#例子,给网友解答的,总觉得应该有更简单的方法