c# 反射初探【转】
首先新建一个类库,将它生成ClassLibrary1.dll
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace WebTest
- {
- public class ReflectTest
- {
- private string word;
- public String Word
- {
- get
- {
- return word;
- }
- set
- {
- word = value;
- }
- }
- public ReflectTest(string w)
- {
- this.word = w;
- }
- public ReflectTest()
- {
- this.word = "word";
- }
- public string WriteString(String s)
- {
- return "Welcome + " + s;
- }
- public static string WriteStatic(String name)
- {
- return "Static : Welcome + " + name;
- }
- public string WriteNoPara()
- {
- return "NoPara : Welcome !";
- }
- private String WritePrivate()
- {
- return "Private ";
- }
- }
- public class TestClass
- {
- }
- }
然后新建立一个项目以入该dll(代码里有e文注释)
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Reflection;
- namespace TestReflect
- {
- class Program
- {
- static void Main(string[] args)
- {
- System.Reflection.Assembly ass;
- Type type;
- Object obj;
- try
- {
- ass = Assembly.Load("ClassLibrary1");
- Console.WriteLine("-----------All the class In this dll-----------");
- foreach (Type t in ass.GetTypes())
- {
- Console.WriteLine(t.Name);
- }
- Console.WriteLine("---------All the Module In this dll----------");
- Module[] miar = ass.GetModules();
- foreach (Module m in miar)
- {
- Console.WriteLine(m.Name);
- }
- type = ass.GetType("WebTest.ReflectTest");
- Console.WriteLine("-----------All the method In WebTest.ReflectTest-----------");
- MethodInfo[] miarr = type.GetMethods();
- foreach (MethodInfo m in miarr)
- {
- Console.WriteLine(m.Name);
- }
- Console.WriteLine("-----------All the Property In WebTest.ReflectTest-----------");
- PropertyInfo[] piarr = type.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
- foreach (PropertyInfo p in piarr)
- {
- Console.WriteLine(p.Name);
- }
- Console.WriteLine("----------Call some methods in WebTest.ReflectTest-----------");
- obj = ass.CreateInstance("WebTest.ReflectTest");
- MethodInfo method = type.GetMethod("WriteString");
- String s = (String)method.Invoke(obj, new string[] { "WriteString" });
- Console.WriteLine(s);
- method = type.GetMethod("WriteStatic");
- s = (String)method.Invoke(null, new string[] { "WriteName" });
- Console.WriteLine(s);
- method = type.GetMethod("WriteNoPara");
- s = (String)method.Invoke(obj, null);
- Console.WriteLine(s);
- method = type.GetMethod("WritePrivate", BindingFlags.Instance | BindingFlags.NonPublic);
- s = (String)method.Invoke(obj, null);
- Console.WriteLine(s);
- Console.WriteLine("---------Use the Property---------");
- PropertyInfo pi = type.GetProperty("Word");
- pi.SetValue(obj, "Word", null);
- Console.WriteLine(pi.GetValue(obj,null));
- Console.WriteLine("--------- Get All Constructor ----------");
- ConstructorInfo[] ci = type.GetConstructors();
- foreach (ConstructorInfo c in ci)
- {
- Console.WriteLine(c.ToString());
- }
- Console.WriteLine("-------- Construct --------");
- ConstructorInfo ci1 = type.GetConstructor(new Type[] { typeof(string) });
- WebTest.ReflectTest wr1 = (WebTest.ReflectTest)ci1.Invoke(new string[] { "XXX" });
- Console.WriteLine(wr1.Word);
- ConstructorInfo ci2 = type.GetConstructor(new Type[0] );
- WebTest.ReflectTest wr2 = (WebTest.ReflectTest)ci2.Invoke(null);
- Console.WriteLine(wr2.Word);
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex);
- }
- finally
- {
- ass = null;
- type = null;
- obj = null;
- }
- }
- }
- }
谢谢.