3
  1. MSDN から次の情報を取得できませんでした:

    ClassInterfaceType.None

    クラスのクラス インターフェイスが生成されないことを示します。インターフェイスが明示的に実装されていない場合、クラスはインターフェイスを介したレイト バインド アクセスのみを提供できIDispatch ます。の推奨設定ですClassInterfaceAttribute。を使用するClassInterfaceType.Noneことは、クラスによって明示的に実装されたインターフェイスを介して機能を公開する唯一の方法です。

  2. [ComVisible(true)]COM の可視性には必須ですか?

4

1 に答える 1

9

最初の問題の説明については、このブログ投稿を参照してください。ポイントはClassInterfaceType.None、余分なインターフェイスが生成されることを指定しない限り、メソッドの順序を変更したり、シグネチャを変更したり、メソッドの一部を削除したりすると、バイナリ互換性の問題が発生する可能性があることです。はるかに優れた代替手段は、インターフェイスを明示的に定義し、それを指定してクラスを継承することClassInterfaceType.Noneです。

ComVisible(true)COM の可視性には必須ではありません。デフォルトでは、パブリック クラスのすべてのパブリック メソッドとすべてのパブリック クラスは COM で表示されますが、他のすべてのエンティティは COM で表示されません。これを変更する必要がある場合は、通常、ComVisible 属性を使用して COM 可視クラスの量を減らします。これは、COM 可視クラスごとにレジストリ エントリとタイプ ライブラリ エントリが生成され、不要なレジストリ汚染が発生し、タイプ ライブラリが膨張するためです。IMO すべてのパブリック エンティティを明示的に ComVisible でマークすることをお勧めします。

于 2009-09-17T05:18:34.190 に答える