Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类型转发_C#_.net - Fatal编程技术网

C# 类型转发

C# 类型转发,c#,.net,C#,.net,任何人都可以提供一个使用“向前键入”的真实senario吗?来源: 例如,假设应用程序在名为Utility.dll的程序集中使用示例类。Utility.dll的开发人员可能会决定重构程序集,在此过程中,他们可能会将示例类移动到另一个程序集。如果旧版本的Utility.dll被新版本的Utility.dll及其配套程序集替换,则使用示例类的应用程序将失败,因为它无法在新版本的Utility.dll中找到示例类 Utility.dll的开发人员可以通过使用TypeForwardedToAttribu

任何人都可以提供一个使用“向前键入”的真实senario吗?

来源:

例如,假设应用程序在名为Utility.dll的程序集中使用示例类。Utility.dll的开发人员可能会决定重构程序集,在此过程中,他们可能会将示例类移动到另一个程序集。如果旧版本的Utility.dll被新版本的Utility.dll及其配套程序集替换,则使用示例类的应用程序将失败,因为它无法在新版本的Utility.dll中找到示例类

Utility.dll的开发人员可以通过使用TypeForwardedToAttribute属性转发示例类的请求来避免这种情况。如果该属性已应用于Utility.dll的新版本,则对示例类的请求将转发到现在包含该类的程序集。现有应用程序继续正常运行,无需重新编译


当框架的不同版本在程序集之间移动类型时,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
}

很好的例子。现在,如果只有WCF解析器尊重
TypeForwardedToAttribute
-P