CA1408: AutoDual ClassInterfaceType を使用しないでください

Item [値]
規則 ID CA1408
カテゴリ Microsoft.Interoperability
互換性に影響する変更点 あり

原因

コンポーネント オブジェクト モデル (COM) 参照可能な型が、ClassInterfaceTypeAutoDual 値に設定された ClassInterfaceAttribute 属性でマークされています。

規則の説明

デュアル インターフェイスを使用する型を使用することで、クライアントを特定のインターフェイス レイアウトに対応付けることができます。 将来のバージョンで、この型またはその基本型のレイアウトに変更が加えられると、インターフェイスに対応付けられた COM クライアントが切り離されます。 既定では、ClassInterfaceAttribute 属性が指定されていない場合、ディスパッチ専用インターフェイスが使用されます。

特に指定されていない限り、パブリックで非ジェネリックの型はすべて COM から参照でき、非パブリック型とジェネリック型はすべて COM から参照できません。

違反の修正方法

この規則の違反を修正するには、ClassInterfaceAttribute 属性の値を ClassInterfaceTypeNone 値に変更し、インターフェイスを明示的に定義します。

どのようなときに警告を抑制するか

型とその基本型のレイアウトが将来のバージョンで変更されないことが確実である場合を除き、この規則による警告を抑制しないでください。

次の例では、規則に違反するクラスと、明示的なインターフェイスを使用するクラスの再宣言を示します。

using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(true)]
namespace InteroperabilityLibrary
{
   // This violates the rule.
   [ClassInterface(ClassInterfaceType.AutoDual)]
   public class DualInterface
   {
      public void SomeMethod() {}
   }

   public interface IExplicitInterface
   {
      void SomeMethod();
   }

   [ClassInterface(ClassInterfaceType.None)]
   public class ExplicitInterface : IExplicitInterface
   {
      public void SomeMethod() {}
   }
}

CA1403: Auto 配置の型を COM 参照可能にすることはできません

CA1412: ComSource インターフェイスを IDispatch として設定します

関連項目