公共语言运行库中的类型转发

更新:2007 年 11 月

使用类型转发可以将类型移到另一个程序集,而不必重新编译使用原始程序集的应用程序。

例如,假设应用程序使用名为 Utility.dll 的程序集中的 Example 类。Utility.dll 的开发人员可能决定重构该程序集,并且在重构过程中可能将 Example 类移到另一个程序集。如果旧版本的 Utility.dll 由新版本的 Utility.dll 及其配套程序集取代,则使用 Example 类的应用程序将失败,因其无法在新版本的 Utility.dll 中找到 Example 类。

Utility.dll 的开发人员可以使用 TypeForwardedToAttribute 属性转发对 Example 类的请求,从而避免此问题。如果已向新版本的 Utility.dll 应用了该属性,则对 Example 类的请求将转发到该类目前所属的程序集。现有应用程序将继续正常执行,无需重新编译。

说明:

在 .NET Framework 2.0 版中,无法从使用 Visual Basic 编写的程序集转发类型。但是,用 Visual Basic 编写的应用程序可以使用经转发的类型。也就是说,如果应用程序使用通过 C# 或 C++ 编码的程序集,并且该程序集中的某类型被转发至另一个程序集,则 Visual Basic 应用程序可以使用该转发的类型。

转发类型

转发类型有四个步骤:

  1. 将类型的源代码从原始程序集移到目标程序集。

  2. 在该类型原来所属的程序集中,为被移动的类型添加 TypeForwardedToAttribute。下面的代码显示名为 Example 的被移动类型的属性。

    [assembly:TypeForwardedToAttribute(typeof(Example))]
    
    [assembly:TypeForwardedToAttribute(Example::typeid)]
    
  3. 编译现在包含该类型的程序集。

  4. 重新编译该类型原来所属的程序集,其中带有对现在包含该类型的程序集的引用。例如,如果从命令行编译一个 C# 文件,则使用 /reference(导入元数据)(C# 编译器选项)选项指定包含类型的程序集。在 C++ 中,在源文件中使用 #using 指令指定包含类型的程序集。

请参见

参考

TypeForwardedToAttribute

Type Forwarding

The #using Directive