0
object
またはvariant
を使用する必要がありますか?どんな違いがあるの?COM可視関数(VB6)の複合オブジェクトのパラメータタイプ
object
またはvariant
を使用する必要がありますか?どんな違いがあるの?COM可視関数(VB6)の複合オブジェクトのパラメータタイプ
オブジェクトを使用する場合、クライアントはIUnknown
またはIDispatch
をサポートするものを渡す必要があります。つまり、パラメータはオブジェクトでなければなりません。 Variantを使用すると、クライアントは何かを渡すことができます。
Variantを選択した場合、パラメータが0、Null、Empty、vbNullString、またはNothing ;-)の可能性も心配する必要があります。 –
@Mike Spross:良いコメント。私があなたがそれを作るならば、クライアントがNothingで渡すことができることを観察しなければならないように、pedantaholicとして。 – MarkJ
@ MarkJ:本当です。私は、何かが存在するかどうかを判断する際に、Variantにはさらに多様性があると伝えようとしていますが、Objectは何かが存在しないことを表現するための1つの方法しか定義していません。特に、割り当てられていないVariantがEmptyにデフォルト設定されているという事実は、IsNullでパラメータをチェックするが、IsEmptyでチェックするのを忘れたコードでは、混乱を招く可能性があります。私たちは、呼び出し元がNullを渡すことができるようにVariantプロパティを使用するいくつかのクラスを持っていますが、呼び出し元が明示的にプロパティをNULLにしなかったときに奇妙なことが起こるEmptyをチェックするようにはコード化されませんでした。 –