1. 程式人生 > >反射程序集

反射程序集

b2c urn 數組 style content eal 我們 配置文件 text




通過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層了呢?
















反射程序集