public ref class ComVisibleAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Field | System.AttributeTargets.Interface | System.AttributeTargets.Method | System.AttributeTargets.Property | System.AttributeTargets.Struct, Inherited=false)]
public sealed class ComVisibleAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Field | System.AttributeTargets.Interface | System.AttributeTargets.Method | System.AttributeTargets.Property | System.AttributeTargets.Struct, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ComVisibleAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Field | System.AttributeTargets.Interface | System.AttributeTargets.Method | System.AttributeTargets.Property | System.AttributeTargets.Struct, Inherited=false)>]
type ComVisibleAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Field | System.AttributeTargets.Interface | System.AttributeTargets.Method | System.AttributeTargets.Property | System.AttributeTargets.Struct, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ComVisibleAttribute = class
    inherit Attribute
Public NotInheritable Class ComVisibleAttribute
Inherits Attribute
ComVisibleAttribute

以下示例演示如何控制类 COM 的可见性,使其成员不可见。 通过在 Visual Basic 示例中) ( SampleClass 上将 设置为 ComVisibleAttribute MyClass false ,在 false MyProperty MyMethod ,可以避免无意中通过继承向 COM 公开成员。

using namespace System::Runtime::InteropServices; [ComVisible(false)] ref class MyClass private: int myProperty; public: MyClass() //Insert code here. [ComVisible(false)] int MyMethod( String^ param ) return 0; bool MyOtherMethod() return true; property int MyProperty [ComVisible(false)] int get() return myProperty; 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 return MyProperty; 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 Return MyProperty End Get End Property End Class

可以将此属性应用于程序集、接口、类、结构、委托、枚举、字段、方法、事件访问器或属性。

默认值为 true ,指示托管类型对 COM 可见。 不需要此属性即可使公共托管程序集和类型可见;默认情况下,它们对 COM 可见。 只能 public 使类型可见。 特性不能用于使 其他或 internal protected 类型对 COM 可见,或使不可见类型的成员可见。

将程序集上的 属性设置为 false public 隐藏程序集中的所有类型。 可以通过将各个类型设置为 ,有选择地使程序集中的类型 true 可见。 在特定类型上将 属性设置为 false 会隐藏该类型及其成员。 但是,如果类型不可见,则无法使类型的成员可见。 在类型上将 属性设置为 false 可防止将该类型导出到类型库;类未注册;接口永远不会响应非托管 QueryInterface 调用。

除非将类及其成员显式设置为 false ,否则继承的类可以向在原始类中不可见的 COM 基类成员公开。 例如,如果将 ClassA 设置为 false ,但不将特性应用于其成员,则类及其成员对 COM 不可见。 但是,如果从 ClassA 派生 ClassB 并将 ClassB 导出到 COM,则 ClassA 成员将成为 ClassB 的可见基类成员。

有关导出过程的详细说明,请参阅 程序集到类型库转换摘要