關於反射程式集的心得

來源:互聯網
上載者:User

   近來剛好在看一些關於反射的東西,之前一直沒用過,真是慚愧,後來看了些資料後,覺得好像也不怎麼難,就一句話:
   Assembly.Load(Assembly.GetExecutingAssembly().FullName).CreateInstance(Namespace + "." + ClassName);就搞掂了,

       但是很多貌似簡單(或許真的是很簡單吧)的問題就搞了我很久,就是關於那個程式集的問題,一開始的時候,

       只是知道Assembly.Load("程式集名")這個,只是知道用Assembly.GetExecutingAssembly().FullName這可以拿到了,

      看似一切都是那麼的簡單,但是當我在調試時,卻發現我反射不出那個類,找了些資料才知道,原來是程式集出了問題了.

      正確點來說,是我用錯了程式集,對於很多新人來說,或是剛接觸的反射的來說,可能並不怎麼瞭解那些程式集是怎麼一回事.

      我做了測試後得出:

       1.類

              所有的類是在同一個程式集中,所有的類都在App_Code的檔案夾下(預設),在App_Code裡,不管你分幾個檔案夾存放那些類,不管

              類中有多少個namespace,都只有一個程式集.

       2.使用者控制項

             每一個UserControl屬於不同的程式集,不管你是否放在同一個檔案夾裡.

       3.頁面

             每一個不同的頁面都屬於同一個程式集.不管程式碼的命名空間是否一致.在運行時,所有頁面的命令空間會預設顯示
             為"ASP",而你加的命名空間,則和頁面的名字加起來統稱為基類名了.


       關於反射Assembly.Load("程式集").CreateInstance("命名空間.類"),而不管在哪一層寫這段代碼其中的("程式集")

讀取的實際是web層bin檔案夾下的dll,也就是說你反射的類的程式集dll在web層的bin下必須有,當我們的程式運行或發布時,.Net工具會自動

的添加當前項目的類的dll,頁面的dll,還有使用者控制項的dll.

       注意CreateInstance()一定是命名空間.類名,否則建立的執行個體為空白

              Assembly.Load("程式集名")

              Assembly.LoadFrom("程式集實際路徑")
  希望我這些總結可以給那些剛入門的朋友一點協助,本人才疏學淺,要是有什麼不對的地方,還忘朋友倍們指出.

  在此賦上我的測試代碼.Reflect程式集測試例子  ,大家下載後,用VS中開啟後,可以直接瀏覽default,和default2這兩個頁面,並做些對比,相信這時你會明白很多.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.