MSDN から次の情報を取得できませんでした:
ClassInterfaceType.None
クラスのクラス インターフェイスが生成されないことを示します。インターフェイスが明示的に実装されていない場合、クラスはインターフェイスを介したレイト バインド アクセスのみを提供でき
IDispatch
ます。の推奨設定ですClassInterfaceAttribute
。を使用するClassInterfaceType.None
ことは、クラスによって明示的に実装されたインターフェイスを介して機能を公開する唯一の方法です。[ComVisible(true)]
COM の可視性には必須ですか?
3872 次
1 に答える
9
最初の問題の説明については、このブログ投稿を参照してください。ポイントはClassInterfaceType.None
、余分なインターフェイスが生成されることを指定しない限り、メソッドの順序を変更したり、シグネチャを変更したり、メソッドの一部を削除したりすると、バイナリ互換性の問題が発生する可能性があることです。はるかに優れた代替手段は、インターフェイスを明示的に定義し、それを指定してクラスを継承することClassInterfaceType.None
です。
ComVisible(true)
COM の可視性には必須ではありません。デフォルトでは、パブリック クラスのすべてのパブリック メソッドとすべてのパブリック クラスは COM で表示されますが、他のすべてのエンティティは COM で表示されません。これを変更する必要がある場合は、通常、ComVisible 属性を使用して COM 可視クラスの量を減らします。これは、COM 可視クラスごとにレジストリ エントリとタイプ ライブラリ エントリが生成され、不要なレジストリ汚染が発生し、タイプ ライブラリが膨張するためです。IMO すべてのパブリック エンティティを明示的に ComVisible でマークすることをお勧めします。
于 2009-09-17T05:18:34.190 に答える