与大家分享下反射技术
ReflectionTest.rar
(38.5 KB)
程序代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; //和大家分享一下自己在工作中用到反射技术的一些简单应用 //此案例应用场景是这个样子的: //在我的项目中有很多的DLL, 每个DLL都有一个Mark属性,是用 //来标识这个DLL作用的中文名称来的,因为我要知道这个DLL是作 //什么用的,那么就只有取得其Mark属性. //此紧紧作为一个示例..... //备注:我用到了c#2008的新特性,关键字var,若不明白,请msdn. namespace ReflectionTest { class Program { static void Main(string[] args) { Console.WriteLine("请输入DLL文件的路径"); var pathFile = Console.ReadLine(); //载入程序集 var myAssembly = Assembly.LoadFrom(@pathFile); //取得程序集myAssembly的所有类型 var types = myAssembly.GetTypes(); //遍历类型,以获得类开的属性 foreach (var type in types) { //获得类型属性集 var props = type.GetProperties(); //实例化此类型 var typeFlection = System.Activator.CreateInstance(type); foreach (var prop in props) { //属性名称是否是"Mark" if (prop.Name == "Mark") { //取得属性值 var obj = prop.GetValue(typeFlection, null); var MarkValue = obj; Console.WriteLine("Mark的值为:{0}", MarkValue); } } } Console.ReadLine(); } } }
程序代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace cls1 { public class Class1 { private string m1; public Class1() { m1 = "cls1.Class1"; } public string Mark { get { return m1; } } } public class Class2 { private string m1; public Class2() { m1 = "cls1.Class2"; } public string Mark { get { return m1; } } } public class Class3 { private string m1; public Class3() { m1 = "cls1.Class3"; } public string Mark { get { return m1; } } } }
程序代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace cls2 { public class Class1 { private string m1; public Class1() { m1 = "cls2.Class1"; } public string Mark { get { return m1; } } } public class Class2 { private string m1; public Class2() { m1 = "cls2.Class2"; } public string Mark { get { return m1; } } } public class Class3 { private string m1; public Class3() { m1 = "cls2.Class3"; } public string Mark { get { return m1; } } } }