您的位置:首页 > 编程语言 > C#

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;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: