2009-11-16 38 views

回答

7

的BCL庫共同使用TypeForwardedTo屬性時不同版本的框架的移動組件之間的類型。例如,Func<>樣式委託從3.5框架中的System.Core移動到4.0框架中的mscorlib。

可以查看真實的世界由4.0反彙編,雙擊清單節點上打開System.Core.dll並尋找所有類似下面的

.class extern forwarder System.Func`1 
{ 
    .assembly extern mscorlib 
} 
.class extern forwarder System.Func`2 
{ 
    .assembly extern mscorlib 
} 
.class extern forwarder System.Func`3 
{ 
    .assembly extern mscorlib 
} 
+1

很好的例子線使用了這一點。現在如果只有WCF解析器會尊重'TypeForwardedToAttribute' ;-p – 2009-11-16 22:07:20

5

msdn

例如,假設一個應用程序使用的實施例類在名爲Utility.dll的組件。 Utility.dll的開發人員可能會決定重構該程序集,並且在此過程中他們可能會將Example類移至另一個程序集。如果舊版本的Utility.dll被替換爲新版本的Utility.dll及其配套程序集,則使用Example類的應用程序將失敗,因爲它無法在新版本的Utility.dll中找到Example類。

Utility.dll的開發人員可以通過使用TypeForwardedToAttribute屬性轉發對Example類的請求來避免此情況。如果該屬性已應用於新版本的Utility.dll,則將Example類的請求轉發給現在包含該類的程序集。現有應用程序繼續正常運行,無需重新編譯。

0

一般來說,它似乎允許您的庫類更靈活/重構能力。我發現MSDN博客上的文章很有幫助。在這篇文章中,其中一個例子顯示了一個現有的庫被拆分成2個獨立的DLL,其中使用這些庫的應用程序不必關心類型是否由於類型轉發而在新版本的dll中移動到不同的dll。

MSDN Blog Posting: Type Forwarding