Assembly:得到一个程序集中的反射信息。
程序集中的两种存在形式:
1)*.dll形式存在的程序集,不能直接运行,是“类库”
2)*.exe的程序集,可以点击直接运行
如何加载程序集:
1)Assembly.Load(); //不推荐使用
2)Assembly.LoadFrom("程序集的完整路径名称");
例如:
Assembly assObj = Assembly.LoadFrom(@"E:\System.dll");
Type[] typeArray = assObj.GetTypes();
源代码:
实体类:
/***
*实体类:被分析的对象
*
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace chapter31使用Assembly程序集
{
public class Person
{
//字段
public string Name;
public int Age;
private int _ID;
//属性
public int ID
{
get { return _ID; }
set { _ID = value; }
}
//方法
public void DisplayID()
{
Console.WriteLine(ID);
}
public void DisplayName()
{
Console.WriteLine(Name);
}
public void DisplayAge()
{
Console.WriteLine(Age);
}
}
}
主程序:
/***
*学习Assembly程序集
*1.通过程序集中的一个类的实例化,从而得到这个"程序集"(Assembly)对象
*2.通过路径,直接访问"程序集"(*.dll)
*
*
*
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace chapter31使用Assembly程序集
{
class Program
{
/// <summary>
/// 通过程序集中的一个类的实例化,从而得到这个"程序集"(Assembly)对象
/// 得到这个程序集对象以后,就可以打印出程序集中的所有类
/// </summary>
public void Test1()
{
Person per = new Person();
//得到程序集
Assembly assObj = per.GetType().Assembly;
Console.WriteLine(assObj.FullName);
//通过程序集,得到程序集中所有的类
Type[] typeArr = assObj.GetTypes();
foreach (var item in typeArr)
{
Console.WriteLine(item.Name);
}
}
/// <summary>
/// 直接得到"程序集",使用路径的方式
/// </summary>
public void Test2()
{
//通过路径的方式直接得到程序集的对象
Assembly assObj = Assembly.LoadFrom(@"E:\任向飞\CSharp\c#进阶刘国柱\IO序列化\chapter31使用Assembly程序集\bin\Debug\System.dll");
//通过程序集,得到程序集中所有的类
Type[] typeArr = assObj.GetTypes();
foreach (var item in typeArr)
{
Console.WriteLine(item.Name);
}
Console.WriteLine("直接访问程序集的测试");
}
static void Main(string[] args)
{
Program obj = new Program();
// obj.Test1();
obj.Test2();
}
}
}