反射器组件
由Type,反射读取,相同。也能够把读取的对象的范围扩大。
一。关于程序集
在.net中,程序集是进行部署,版本号控制的基本单元;
System.reflection命名空间下的Assembly类型,代表了一个程序集,并包括了关于程序集的信息。
获取assembly对象的方法:
loadForm 參数:程序集的文件名(假设载入一个不属于当前项目的程序集。则要写上全名)
Load 參数:提供程序集名称就可以,而非文件名。
二,反射程序集演示样例
首先,我们建立例如以下结构解决方式:
然后在Test类库中的class1里面加入例如以下測试内容:
namespace Test
{
public abstract class BaseClass { }
public struct DemoStruct { }
public delegate void DemoDelegate(Object sender,EventArgs e);
public enum DemoEnum { terrible,bad,common=4,good,wonderful=8}
public interface IDemoInterface {
void SayGreeting(string name);
}
public interface IdemoInterface2 { }
public sealed class DemoClass : BaseClass, IDemoInterface, IdemoInterface2 {
private string name;
private string city;
public readonly string title;
public const string text = "const field";
public event DemoDelegate myEvent;
public string Name {
private get { return name; }
set { name = value; }
}
public DemoClass() {
title = "Readonly field";
}
public class NestedClass { }
public void SayGreeting(string name)
{
Console.WriteLine("morning:"+name);
}
}
}接着,我们就使用Assembly来获取程序集:
namespace 反射程序集
{
class Program
{
static void Main(string[] args)
{
AssemblyExplore();
}
//查看Test程序集中的所有类型
public static void AssemblyExplore() {
StringBuilder sb = new StringBuilder();
Assembly asm = Assembly.Load("Test"); //载入Test
sb.AppendLine("全名:"+asm.FullName); //输出全名
sb.AppendLine("路径:"+asm.Location);//输出路径
Module[] modules = asm.GetModules(); //获取程序集中所有模块
foreach (Module model in modules ) //遍历模块数组
{
sb.AppendLine("模块:"+model);
Type[] types = model.GetTypes(); //得到模块里面的各种类,接口啥的。。。
foreach (Type t in types)
{
sb.AppendLine(" 类型:"+t); //看看啥类型滴。。。。
}
}
Console.WriteLine(sb.ToString());
}
}
}
查看我们执行结果:
真的好奇妙呀~~~等等。是不是想起曾经设计模式中读取配置文件。然后反射载入D层了呢?
浙公网安备 33010602011771号