任何人都可以提供使用Type Forward的真实场景吗?
答案 0 :(得分:8)
当框架的不同版本在程序集之间移动类型时,BCL库通常使用TypeForwardedTo
属性。例如,Func<>
样式委托从3.5框架中的System.Core移动到4.0框架中的mscorlib。
您可以通过在ildasm中从4.0打开System.Core.dll,双击Manifest节点并查找与以下内容类似的所有行来查看对此的实际使用情况
.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 :(得分:5)
来自msdn:
例如,假设应用程序在名为Utility.dll的程序集中使用Example类。 Utility.dll的开发人员可能决定重构程序集,并且在此过程中他们可能会将Example类移动到另一个程序集。如果旧版本的Utility.dll被新版本的Utility.dll及其随播程序集所取代,则使用Example类的应用程序将失败,因为它无法在新版本的Utility.dll中找到Example类。
Utility.dll的开发人员可以通过使用TypeForwardedToAttribute属性转发Example类的请求来避免这种情况。如果该属性已应用于新版本的Utility.dll,则对Example类的请求将转发到现在包含该类的程序集。现有应用程序继续正常运行,无需重新编译。