ComVisibleAttribute クラス

個々のマネージ型またはマネージ メンバ、またはアセンブリ内のすべての型の COM 参照可能範囲を制御します。

この型のすべてのメンバの一覧については、ComVisibleAttribute メンバ を参照してください。

System.Object
   System.Attribute
      System.Runtime.InteropServices.ComVisibleAttribute

<AttributeUsage(AttributeTargets.Assembly Or AttributeTargets.Class _
   Or AttributeTargets.Struct Or AttributeTargets.Enum Or _
   AttributeTargets.Method Or AttributeTargets.Property Or _
   AttributeTargets.Field Or AttributeTargets.Interface Or _
   AttributeTargets.Delegate)>
NotInheritable Public Class ComVisibleAttribute   Inherits Attribute
[C#]
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class
   | AttributeTargets.Struct | AttributeTargets.Enum |
   AttributeTargets.Method | AttributeTargets.Property |
   AttributeTargets.Field | AttributeTargets.Interface |
   AttributeTargets.Delegate)]
public sealed class ComVisibleAttribute : Attribute
[C++]
[AttributeUsage(AttributeTargets::Assembly |
   AttributeTargets::Class | AttributeTargets::Struct |
   AttributeTargets::Enum | AttributeTargets::Method |
   AttributeTargets::Property | AttributeTargets::Field |
   AttributeTargets::Interface | AttributeTargets::Delegate)]
public __gc __sealed class ComVisibleAttribute : public Attribute
[JScript]
public
   AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class |
   AttributeTargets.Struct | AttributeTargets.Enum |
   AttributeTargets.Method | AttributeTargets.Property |
   AttributeTargets.Field | AttributeTargets.Interface |
   AttributeTargets.Delegate)
class ComVisibleAttribute extends Attribute

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

この属性は、アセンブリ、インターフェイス、クラス、構造体、デリゲート、列挙体、フィールド、メソッド、またはプロパティに適用できます。

既定値は true です。これは、マネージ型が COM から参照できることを示します。この属性は、パブリック マネージ アセンブリとパブリック マネージ型を参照可能にする場合には必要ありません。これらは、既定で COM から参照できます。参照可能にできるのは public 型だけです。この属性を使用して、 internal 型または protected 型を COM から参照可能にしたり、参照不可能な型のメンバを参照可能にしたりすることはできません。

アセンブリに対してこの属性を false に設定すると、そのアセンブリ内のすべての public 型を参照できなくなります。アセンブリ内の型を個別に参照可能にするには、個々の型に対して true を設定します。特定の型に対してこの属性を false に設定すると、その型とメンバを参照できなくなります。ただし、参照不可能な型のメンバを参照可能にすることはできません。この属性が false に設定された型は、タイプ ライブラリにエクスポートできません。また、クラスの場合は登録できなくなります。インターフェイスの場合は、アンマネージの QueryInterface の呼び出しに対して応答しなくなります。

クラスおよびそのメンバが明示的に false に設定されていない限り、継承したクラスでは、元のクラスで参照不可能だった基本クラスのメンバを COM に公開できます。たとえば、ClassA を false に設定し、そのメンバにはこの属性を適用しなかった場合、ClassA とそのメンバを COM が参照することはできません。しかし、ClassA から継承して ClassB を作成し、ClassB を COM にエクスポートすると、ClassA のメンバは、ClassB の基本クラスのメンバとして参照可能になります。

エクスポート プロセスの詳細については、「 アセンブリからタイプ ライブラリへの変換の要約 」を参照してください。

使用例

COM に対するクラスの参照可能範囲を制御して、そのメンバを参照不可能にする方法を次の例に示します。 MyClass では ComVisibleAttributefalse に設定し、 MyMethodMyProperty では false を設定することにより、継承を通じて意図せずメンバが COM に公開されることを防ぐことができます。

 
Imports System.Runtime.InteropServices

<ComVisible(False)> _
Class SampleClass
    
    Public Sub New()
        'Insert code here.
    End Sub
    
    <ComVisible(False)> _
    Public Function MyMethod(param As String) As Integer
        Return 0
    End Function    
    
    Public Function MyOtherMethod() As Boolean
        Return True
    End Function
    
    <ComVisible(False)> _
    Public ReadOnly Property MyProperty() As Integer
        Get
            Return MyProperty
        End Get
    End Property
    
End Class

[C#] 
using System.Runtime.InteropServices;

[ComVisible(false)]
class MyClass
{
   public MyClass()
   {
      //Insert code here.
   }
   
   [ComVisible(false)]
   public int MyMethod(string param) 
   {
      return 0;
   }

   public bool MyOtherMethod() 
   {
      return true;
   }

   [ComVisible(false)]
   public int MyProperty
   {
      get
      {
         return MyProperty;
      }
   }
}

[C++] 
using namespace System::Runtime::InteropServices;

[ComVisible(false)]
__gc class MyClass
{
private:
   int myProperty;
public:
   MyClass()
   {
      //Insert code here.
   }
   
   [ComVisible(false)]
   int MyMethod(String* param) 
   {
      return 0;
   }

   bool MyOtherMethod() 
   {
      return true;
   }

   [ComVisible(false)]
   __property int get_MyProperty() {
      return myProperty;
   }
};

[JScript] 
import System.Runtime.InteropServices;

ComVisible(false) class MyClass
{
   public function MyClass()
   {
      //Insert code here.
   }
   
   ComVisible(false) public function MyMethod(param : String) : int 
   {
      return 0;
   }

   public function MyOtherMethod() : boolean
   {
      return true;
   }

   ComVisible(false) public function get MyProperty() : int 
   {
       return MyProperty;
   }
}

必要条件

名前空間: System.Runtime.InteropServices

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

ComVisibleAttribute メンバ | System.Runtime.InteropServices 名前空間 | タイプ ライブラリ エクスポータ (Tlbexp.exe) | アセンブリからタイプ ライブラリへの変換の要約