35

MSDN には、属性に関するこの記事があり[ComVisible]ます。を設定するとどうなるかよくわかりません[ComVisible(true)]

MSDNによると

既定値は trueで、マネージド型が COM から見えることを示します。この属性は、パブリック マネージ アセンブリ型を可視にするためには必要ありません。これらはデフォルトで COM に表示されます。パブリック タイプのみを表示できます。

したがって、パブリック型はデフォルトで COM に表示されると言われています。しかし、彼らはまた、設定によって公開タイプのみを表示できると[ComVisible(true)]も言っています。意味がありません: public 型がデフォルトで表示される場合、どのように設定[ComVisible(true)]すると public 型が表示されるのでしょうか? それらがすでに表示されている場合、どうすればさらに表示されるようになりますか?

おそらく私の理解は正しくありません。誰かが上記のステートメントに光を当てることができれば幸いです。

4

2 に答える 2

27

秘訣は、この属性をアセンブリ レベル (AssemblyInfo.cs 内) で追加することもできることです。指定した場合[assembly: ComVisible(true)](またはアセンブリ レベルで指定しない場合、デフォルトで同じ効果があります)、すべてのパブリック クラスとインターフェイス、およびそれらのパブリック メソッドは、デフォルトで COM 可視になります。

アセンブリ レベルで設定することもできます。そう[assembly: ComVisible(false)]すれば、すべてのパブリック エンティティがデフォルトで、それらにある場合と同じ効果を持つため、本当に必要な[ComVisible(false)]クラス/インターフェイス/メソッドのみを COM 可視 ( ) にマークすることができます。[ComVisible(true)]

これは、ここのように多くのパブリック エンティティがある場合に、公開しすぎないようにするのに役立ちます。このメカニズムがなければ、[ComVisible(false)]公開したくない各クラス/インターフェース/メソッドに設定する必要があります。を使用[assembly: ComVisible(false)]すると、必要なものだけを公開できます。

また、エンティティを COM に公開できるのはpublic(既定または明示的に) だけです。より厳密な可視性を持つエンティティは、COM に公開できません。

于 2013-03-29T08:50:31.660 に答える
22

パブリック タイプがデフォルトで表示される場合は意味がありません。そのため、ComVisible 属性を true [ComVisible(true)] に設定すると、パブリック タイプが表示されます。

ComVisibleAttribute の既定値が true であるため、これらは既定で表示されます。属性を明示的に true に設定しても何も変わりません。意図がより明確になるだけです。これは、見つけたドキュメントの最初の行です。

既定値はtrueで、マネージド型が COM から見えることを示します。この属性は、パブリック マネージ アセンブリと型を可視にするためには必要ありません。これらはデフォルトで COM に表示されます。パブリックタイプのみを表示できます。この属性を使用して、それ以外の内部型または保護された型を COM に表示したり、非表示型のメンバーを表示したりすることはできません。

[ComVisibleAttribute(true)]基本的に、自分で行わない場合、デフォルトでコンパイラが常にコードに追加するように考えることができます。

この属性を設定する必要がある唯一の理由は、パブリック型が COM から参照できないようにするためです(その場合は false に設定します)。デフォルトでは、すでに可視性が保証されています。

明らかに、非公開の型 (たとえば、private や protected) は、COM に表示されることはありません。この属性は、そのようなアクセシビリティを持つ型には影響しません。

于 2013-03-28T17:40:35.507 に答える