2010-06-01 51 views
9

我無法找到任何有關Class Loader在.NET Framework中的概念的好文檔嗎?它是什麼?哪裏可以找到?有人知道嗎?.NET類加載器 - 它是什麼?

+1

爲什麼你認爲有這樣的事情在.NET中的類加載器? – 2010-06-01 06:28:32

+1

有人問我這個問題,從來沒有遇到過它。我知道這個概念存在於Java中,並且想知道.NET中是否存在相同的概念。 – user118190 2010-06-01 21:06:55

回答

13

在.NET程序集中是基本的部署單元。實際加載組件的技術稱爲Fusion。欲瞭解更多詳情,請閱讀.NET Fusion Workshop。每個程序集都有自己的類加載器來加載該程序集中的類型。

Hosting the Common Language Runtime也可能是感興趣的。

我不認爲.NET中的Class Loader具有與Java中一樣的重要性或功能。類的加載將由程序集的類加載器處理。

動態加載通常會通過加載程序集,然後實例化類來完成:

Assembly assembly = Assembly.LoadFrom("assemblyName"); 
Type type = assembly.GetType("className"); 
object x = Activator.CreateInstance(type); 
+0

感謝您的有用信息。 – user118190 2013-02-21 18:47:49

2

你是什麼意思?與Java類加載器類似的概念?在.NET中,這個概念被映射到AppDomain(只是搜索AppDomain)。

+0

是的,我正在尋找相當於Java Class Loaders的!那麼,我應該搜索AppDomain並閱讀它嗎? – user118190 2010-06-01 21:07:40

+0

** AFAIK **,它們是等價的概念,我的意思是它們都被用作安全邊界,加載到一個Class Loader/App域中的類型,不能被其他Class Loader/App域中的對象使用等等。 你究竟想要完成什麼? – 2010-06-02 13:35:52

+2

我對Java內部不熟悉,但Java Class Loader和.NET AppDomain對我來說似乎不同。來自Wikipedia:「Java Classloader是Java運行時環境的一部分,可將Java類動態加載到Java虛擬機中。」和「在公共語言運行時,應用程序域是一種機制(類似於操作系統中的一個進程),用於將執行的軟件應用程序彼此隔離,以便它們不會相互影響」。相當於一個AppDomain不是一個JVM實例嗎? – 2010-06-08 20:29:02

4

蘭迪·利維沒有回答所有。類加載器比Assembly.LoadFrom做了更多的工作。 因爲沒有像'Assembly.Unload'這樣的方法。程序集只能通過關閉appdomain來卸載。 Java的類加載器可以比Randy Levy的答案做得更多。這裏標出一個更好的答案在stackoverflow Equivalent of Class Loaders in .NET