'ByRef' パラメータ '<parametername>' の値を一致する引数へ戻してコピーすると、型 '<typename1>' から型 '<typename2>' に下位変換します
更新 : 2007 年 11 月
対応するパラメータ型を拡張する引数を指定してプロシージャが呼び出されましたが、パラメータから引数への変換が縮小変換です。
クラスまたは構造体を定義するとき、その型を他の型に変換するための 1 つ以上の変換演算子を定義できます。また、他の型から元のクラス型または構造体の型に戻すための、逆変換演算子も定義できます。このようなクラス型または構造体の型をプロシージャ呼び出しに使用すると、Visual Basic はこれらの変換演算子を使用して、引数の型を対応するパラメータの型に変換します。
引数を ByRef で渡した場合に、Visual Basic は参照を渡すのではなく、引数の値をプロシージャのローカル変数にコピーする場合があります。このようなケースでは、プロシージャから制御が戻ったとき、Visual Basic はローカル変数の値を呼び出し元のコードの引数にコピーして戻す必要があります。
ByRef の引数の値がプロシージャにコピーされるとき、引数とパラメータの型が同じであれば、変換は必要ありません。しかし、型が同じでない場合、Visual Basic は双方向に型を変換することが必要になります。どちらか一方が自分で定義したクラス型または構造体の型である場合、Visual Basic はそれを他の型と双方向に変換する必要があります。一方が拡張変換であれば、その逆の変換は縮小変換になる可能性があります。
Error ID: BC32053
このエラーを解決するには
可能であれば、呼び出し元の引数にプロシージャのパラメータと同じ型を使用します。そうすれば、Visual Basic は変換を行う必要がありません。
パラメータの型と異なる型の引数を指定してプロシージャを呼び出す必要があるが、値を呼び出し元の引数に戻す必要がない場合は、パラメータを ByRef ではなく ByVal で定義します。
呼び出し元の引数に値を戻す必要がある場合は、可能であれば逆変換演算子をWidening で定義します。