型の転送 (C++/CLI)Type Forwarding (C++/CLI)

型を転送することで、アセンブリ A を使用するクライアントの再コンパイルなしで、アセンブリ (アセンブリ A) の型を別のアセンブリ (アセンブリ B) に移動できます。Type forwarding allows you to move a type from one assembly (assembly A) into another assembly (assembly B), such that, it is not necessary to recompile clients that consume assembly A.

Windows ランタイムWindows Runtime

Windows ランタイムでは、この機能はサポートされていません。This feature is not supported in the Windows Runtime.

共通言語ランタイムCommon Language Runtime

次のコード例では、型の転送の使用方法を示します。The following code example demonstrates how to use type forwarding.

構文Syntax

#using "new.dll"
[assembly:TypeForwardedTo(type::typeid)];

パラメーターParameters

newnew
型定義の移動先となるアセンブリ。The assembly into which you are moving the type definition.

typetype
別のアセンブリに定義を移動する型。The type whose definition you are moving into another assembly.

解説Remarks

コンポーネント (アセンブリ) が公開され、クライアント アプリケーションによって使用された後、型の転送を使用してコンポーネント (アセンブリ) から別のアセンブリに型を移動し、更新されたコンポーネント (必要に応じて追加されたアセンブリ) を公開できます。コンポーネントは、クライアント アプリケーションの再コンパイルなしで機能します。After a component (assembly) ships and is being used by client applications, you can use type forwarding to move a type from the component (assembly) into another assembly, ship the updated component (and any additional assemblies required), and the client applications will still work without being recompiled.

型の転送は、既存のアプリケーションによって参照されるコンポーネントに対してのみ機能します。Type forwarding only works for components referenced by existing applications. アプリケーションのリビルドでは、アプリケーションで使用されている型の適切なアセンブリ参照が必要です。When you rebuild an application, there must be the appropriate assembly references for any types used in the application.

アセンブリから型 (型 A) を転送するときは、アセンブリ参照の他に、その型の TypeForwardedTo 属性を追加する必要があります。When forwarding a type (Type A) from an assembly, you must add the TypeForwardedTo attribute for that type, as well as an assembly reference. 参照されるアセンブリには、次のいずれかを含める必要があります。The assembly that you reference must contain one of the following:

  • 型 A の定義。The definition for Type A.

  • アセンブリ参照と型 A の TypeForwardedTo 属性。A TypeForwardedTo attribute for Type A, as well as an assembly reference.

転送可能な型の例は次のとおりです。Examples of types that can be forwarded include:

  • ref クラスref classes

  • 値クラスvalue classes

  • 列挙型enums

  • インターフェイスinterfaces

次の型は転送できません。You cannot forward the following types:

  • ジェネリック型Generic types

  • ネイティブ型Native types

  • 入れ子にされた型 (入れ子にされた型を転送する場合は、それを囲む型を転送する必要があります)Nested types (if you want to forward a nested type, you should forward the enclosing type)

共通言語ランタイムをターゲットとする任意の言語で作成されたアセンブリに型を転送できます。You can forward a type to an assembly authored in any language targeting the common language runtime.

そのため、アセンブリ A.dll をビルドするために使用されるソース コード ファイルに型定義 (ref class MyClass) が含まれているときに、その型定義をアセンブリ B.dll に移動する場合は、以下を実行します。So, if a source code file that is used to build assembly A.dll contains a type definition (ref class MyClass), and you wanted to move that type definition to assembly B.dll, you would:

  1. MyClass 型定義を、B.dll をビルドするために使用されるソース コード ファイルに 移動します。Move the MyClass type definition to a source code file used to build B.dll.

  2. アセンブリ B.dll をビルドします。Build assembly B.dll

  3. A.dll をビルドするために使用されるソース コードから MyClass 型定義を削除し、それを以下に置き換えます。Delete the MyClass type definition from the source code used to build A.dll, and replace it with the following:

    #using "B.dll"
    [assembly:TypeForwardedTo(MyClass::typeid)];
    
  4. アセンブリ A.dll をビルドします。Build assembly A.dll.

  5. クライアント アプリケーションの再コンパイルなしで、A.dll を使用します。Use A.dll without recompiling client applications.

要件Requirements

コンパイラ オプション: /clrCompiler option: /clr