程式集和反射

來源:互聯網
上載者:User

 

今天主要討論程式集和反射的用方法

程式集:

 

  程式集元素局包括Win32檔案首部、CLR檔案首部和資訊清單

 Win32檔案首部

01. 使程式集可以被Windows作業系統載入和操作

02. 標識應用程式在Windows作業系統中的類型(是控制台,圖形介面還是web頁面)

03. 使用dumpbin.exe工具和 /headers標記瀏覽程式集的Win32檔案首部資訊

例如:dumpbin  Test.exe /headers

 CLR檔案首部

      其定義了多個標記,使得運行庫瞭解託管檔案的布局

     使用dumpin.exe工具和/clrheader標記瀏覽程式集內部的CLR首部資訊

資訊清單

清單是用來描述程式集中元素的相互關係以及程式集正常工作時需要依賴其他哪些程式集的中繼資料

 

CIL代碼

     運行中,程式集內部的CIL代碼被編譯為指平台和CPU的指令

  類型中繼資料:

     完整描述程式集內含類型和引用外部類型的格式

  程式集資源

      程式集資源指定的.NET程式集可以包含一些嵌入資源,表,映像和聲音等。

程式集可以是dll檔案,也可是是EXE檔案

構建和使用程式集

案例:構建程式集,並且使用該程式集

01,我們建立一個Ctop類庫項目,在該類庫項目中包含StrToPinyin類,類中有一個GetChineseSpell方法,方法原型如下:

02,建立一個WinForm應用程式LibraryTest來引用該程式集

引用步驟:首先右鍵添加引用

 

然後通過using  Ctop引入對應的程式集。

03,在txtChinese的KeyUp事件中編寫如下代碼

 

這樣我們就實現了對程式集中方法的調用。

反編譯查看程式的資訊

常見標記的含義:

 

共用組件

共用組件是類型和資源的結合,如果我們需要一個機器層級的類庫,就應該將其部署為共用組件。在部署共用組件到GAC之前,必須為其賦予一個強式名稱。

強式名稱:

強式名稱是由程式集的標識加上公開金鑰和數位簽章組成的,其中,程式集的標識包括簡單文本名稱、版本號碼和地區性資訊(如果提供的話)。它使用對應的私密金鑰從組件檔中產生。(組件檔包含資訊清單,其中包含組成程式集的所有檔案的名稱和雜湊。)

     具有強式名稱的程式集只能使用其他具有強式名稱的程式集的類型。否則將會危及到該具有強式名稱的程式集的安全。

為程式集設定強式名稱:

 

反射的定義:

反射(Reflection)是.NET中的重要機制,通過放射,可以在運行時獲得.NET中每一個類型(包括類、結構、委託、介面和枚舉等)的成員,包括方法、屬性、事件,以及建構函式等。還可以獲得每個成員的名稱、限定符和參數等。有了反射,即可對每一個類型了如指掌。如果獲得了建構函式的資訊,即可直接建立對象,即使這個對象的類型在編譯時間還不知道。

反射的機制

 

通過Assembly類擷取該程式集下所有的模組,然後擷取對應模組下的類型,然後擷取該類型下對應的方法、屬性和事件等。具體代碼如下:

Assembly assembly=   Assembly.LoadFrom(@"F:\ASP.NET學習開始\多線程\CSharp基礎\Ctop\bin\Debug\Ctop.dll");

            Module[] modules = assembly.GetModules();

            foreach (Module module in modules)

            {

                Type[] types = module.GetTypes();

                foreach (Type type in types)

                {

                    Console.WriteLine(type.Name);

             //反射出對應類型下的所有方法

                    MethodInfo[] methodInfos = type.GetMethods();

                    foreach (MethodInfo methodInfo in methodInfos)

                    {

                        Console.WriteLine(methodInfo.Name);

                    }

                    Console.WriteLine("method==============");

                }

                Console.WriteLine("============");

            }

            Console.ReadKey();

好了,對程式集和反射的內容先介紹到這裡。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.