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

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

例如,假设应用程序使用名为 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

#using Directive (C/C++)