类型转接

时间:2009-11-16 21:28:45

标签: c# .net

任何人都可以提供使用Type Forward的真实场景吗?

2 个答案:

答案 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类的请求将转发到现在包含该类的程序集。现有应用程序继续正常运行,无需重新编译。