在我实际工作中反射技术的应用(1)
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; }
}
}
}
" border="0" />