反射程序集
通過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層了呢?
反射程序集