CA1402: COM 参照可能インターフェイスでのオーバーロードを避けてください

TypeName

AvoidOverloadsInComVisibleInterfaces

CheckId

CA1402

カテゴリ

Microsoft.Interoperability

互換性に影響する変更点

あり

原因

コンポーネント オブジェクト モデル (COM: Component Object Model) から参照できるインターフェイスが、オーバーロードされたメソッドを宣言しています。

規則の説明

オーバーロードされたメソッドが COM クライアントに公開されると、最初のメソッド オーバーロードだけが名前を保持します。 後続のオーバーロードは、名前にアンダースコア文字 '_' およびオーバーロードの宣言の順序に対応する整数が付加され、一意の名前に変更されます。 次にメソッドの例を示します。

   void SomeMethod(int valueOne);
   void SomeMethod(int valueOne, int valueTwo, int valueThree);
   void SomeMethod(int valueOne, int valueTwo);

これらのメソッドは、次のように COM クライアントに公開されます。

   void SomeMethod(int valueOne);
   void SomeMethod_2(int valueOne, int valueTwo, int valueThree);
   void SomeMethod_3(int valueOne, int valueTwo);

Visual Basic 6 COM クライアントは、名前にアンダースコアを含むインターフェイス メソッドを実装できません。

違反の修正方法

この規則の違反を修正するには、名前が一意になるようにオーバーロードされたメソッドの名前を変更します。 または、COM からインターフェイスを参照できるようにするために、internal (Visual Basic では Friend) を変更するか、false に設定した System.Runtime.InteropServices.ComVisibleAttribute 属性を適用します。

警告を抑制する状況

この規則による警告は抑制しないでください。

使用例

この規則に違反しているインターフェイスと、規則に適合するインターフェイスを次の例に示します。

Imports System
Imports System.Runtime.InteropServices

<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary

   ' This interface violates the rule.
   <ComVisibleAttribute(True)> _ 
   Public Interface IOverloadedInterface

      Sub SomeSub(valueOne As Integer)
      Sub SomeSub(valueOne As Integer, valueTwo As Integer)

   End Interface

   ' This interface satisfies the rule.
   <ComVisibleAttribute(True)> _ 
   Public Interface INotOverloadedInterface

      Sub SomeSub(valueOne As Integer)
      Sub AnotherSub(valueOne As Integer, valueTwo As Integer)

   End Interface

End Namespace
using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
   // This interface violates the rule.
   [ComVisible(true)]
   public interface IOverloadedInterface
   {
      void SomeMethod(int valueOne);
      void SomeMethod(int valueOne, int valueTwo);
   }

   // This interface satisfies the rule.
   [ComVisible(true)]
   public interface INotOverloadedInterface
   {
      void SomeMethod(int valueOne);
      void AnotherMethod(int valueOne, int valueTwo);
   }
}

関連規則

CA1413: Com 参照可能な値型ではパブリックでないフィールドを使用しません

CA1407: Com 参照可能な型で静的メンバーを使用しません

CA1017: アセンブリに ComVisibleAttribute を設定します

参照

参照

Long 型 (Visual Basic)

その他の技術情報

アンマネージ コードとの相互運用