C#/.NET的反射在很多情况下都会被使用,对于稍微复杂一点的.NET程序来说,反射可以提高我们的开发效率(当然,这里有人会说反射会损失程序的性能,这是个仁者见仁的事情,自己看着办吧。
笔者个人认为:如今的高质的硬件配置的情况下,只要你的反射写得没问题,性能问题可以不用考虑。)。
本文会给大家分享一下如何利用Assembly.Load()方法来动态加载指定命名空间下所有类的所有字段信息,并把这个字段成员输出到控制台。
首先看一下我已经做好的实验的结果图:
没错,本示例实验想达到的效果即为上图呈现的。在这里分享出来,目的是为了帮助还在.NET反射路上摸索的同学们。好了,其他的话就不多说,直接进入示例话题:
一、首先,我们需要创建两个C#[.NET]的项目,分别为一个控制台项目,命名为:AssemblyDemo,和一个类库项目,命名为:AssemblyDemo.Business。
二、在AssemblyDemo.Business项目中创建一个名为Security的文件夹,再在这个Security文件夹中创建两个类文件,分别为:PermissionCode.cs和Role.cs
创建这两个文件的目的只在做实例的结果中显示得现清楚,如果你在跟着本文做示例,那这两个文件的名称和位置都可以根据自己喜好来自定义,但要确保你在后续的实验中能正确读取到程序集的路径。
现在我们分别向PermisionCode.cs文件和Role.cs文件中添加如下示例代码:PermissionCode.cs:
namespace AssemblyDemo.Business.Security
{
public class PermissionCode
{
public static readonly string Create = "CREATE";
public static readonly string Delete = "DELETE";
public static readonly string Update = "UPDATE";
public static readonly string Query = "QUERY";
}
}
Role.cs:
namespace AssemblyDemo.Business.Security
{
public class Role
{
public static readonly string Administrator = "ADMINISTRATOR";
public static readonly string Admin = "ADMIN";
public static readonly string General = "GENERAL";
}
}
三、我们在项目AssemblyDemo添加对项目AssemblyDemo.Business的引用,然后我们就可以使用Assembly.Load()来加载程序集AssemblyDemo.Business,然后使用Linq即可读取到指定命名空间下的所有类了 。具体的读取代码如下:
using System;
using System.Linq;
using System.Reflection;
namespace AssemblyDemo
{
public class Program
{
static void Main(string[] args)
{
LoadInfoByAssembly();
Console.ReadKey();
}
private static void LoadInfoByAssembly()
{
var query = from t in Assembly.Load("AssemblyDemo.Business").GetTypes()
where t.IsClass && t.Namespace.Equals("AssemblyDemo.Business.Security", StringComparison.InvariantCultureIgnoreCase)
select t;
;
query.ToList().ForEach(x =>
{
Console.WriteLine("类命名:{0}", x.Name);
foreach (var field in x.GetFields())
{
Console.WriteLine("字段名称:{0},字段值:{1}", field.Name, field.GetValue(field.Name));
}
Console.WriteLine("========================================\n");
});
}
}
}
好了,本示例还是比较简单的。希望本文对你理解.NET的反射加载程序集有所帮助。
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册