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

TypeName

AvoidNonpublicFieldsInComVisibleValueTypes

CheckId

CA1413

分類

Microsoft.Interoperability

互換性に影響する変更点

あり

原因

コンポーネント オブジェクト モデル (COM: Component Object Model) から参照できるというマークが付けられた値型が、非パブリック インスタンス フィールドを宣言しています。

規則の説明

COM から参照できる値型の非パブリック インスタンス フィールドは、COM クライアントで表示できます。フィールドの内容を調べて、公開をお勧めできない情報や、設計またはセキュリティに意図しない影響を及ぼす情報が含まれていないかどうかを確認してください。

既定では、すべてのパブリックな値型を COM から参照できます。ただし、誤った規則違反のレポートを減らすために、この規則では、COM から参照できる型を明示的に示す必要があります。包含アセンブリは、ComVisibleAttribute を false に設定してマークし、型は、ComVisibleAttribute を true に設定してマークする必要があります。

違反の修正方法

この規則の違反を修正して、フィールドを非表示のままにするには、値型を参照型に変更するか、ComVisibleAttribute 属性を型から削除します。

警告を抑制する状況

フィールドをパブリックに公開できる場合は、この規則による警告を抑制しても安全です。

使用例

この規則に違反する型を次の例に示します。

Imports System
Imports System.Runtime.InteropServices

<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary

   <ComVisibleAttribute(True)> _ 
   Public Structure SomeStructure

      Friend SomeInteger As Integer 

   End Structure 

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

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
   [ComVisible(true)]
   public struct SomeStruct
   {
      internal int SomeValue;
   }
}

関連規則

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

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

参照

概念

相互運用のための .NET 型の要件

その他の技術情報

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