1

ParamArray ByRefを使用する方法はありますか?それを除けば、同じことを達成する回避策はありますか?

私はいくつかの過負荷を行うことができましたが、私は不器用さを避けようとしています。

背景:古いコードを移植し、可能な限り同じ構造を維持しようとしています。


編集

私が欲しいものの具体例:

私はvb.netに移植しているturboBasicにいくつかのコードを持っています。コードには、次のような関数が組み込まれています。

Input#1,Data$(I%,1),Data$(I%,2),Data$(I%,3)

ここで、Input()はファイル#1を取得し、そこから3つのデータを読み取り、表示されている3つの変数に割り当てます。この動作を自分のInput()関数で再現したいと思います。そのためには、3つ(またはそれ以上またはそれ以下)の変数を取り込んで、それらに値を割り当てるにはどうすればよいですか?

理想的には、Input()の独自の定義を変更するだけでこれを実現できるので、コードベースをできるだけ少なくすることができます。

4

3 に答える 3

2

現在、VB.NETで参照によってParamArrayを渡す方法はありません。指定された一連の値をParamArrayを受け入れるメソッドに渡すために、CLRは適切な長さの配列に指定された値を入力し、この配列を呼び出したメソッドに渡します。渡された配列からすべての値をコピーして元の変数に戻す方法はありません。

ParamArraysを渡す唯一の方法が参照によるものであるVB6からコードを移植していると思いますが、.NETではこの機能は必要ありません。

于 2010-11-10T16:43:02.020 に答える
2

TurboBasicを使用したことはありませんが、構文はVB6 Input#ステートメントと同じように見えるので、セマンティクスも同じだと思います。

このVB6コード

Input #1,Data$(I%,1),Data$(I%,2),Data$(I%,3)

このVB.Netと同等です

Input(1,Data$(I%,1))
Input(1,Data$(I%,2))
Input(1,Data$(I%,3))

VB.Netアップグレードウィザードは、VB6Input #ステートメントを次のように変換します。独自の関数を実装するのではなく、このようにコードを移植します。VB6からVB.netに変換するには、コードベースを大幅に編集する必要があります。TurboBasicはさらに要求が厳しいと思います。

于 2010-11-10T17:54:10.973 に答える
1

パラメータを新しい配列インスタンスに割り当て、呼び出し元(変数またはフィールドを渡している)が新しいインスタンスを表示することを期待している場合を除いて、は必要ありませんByRef

がなくてもByRef、呼び出し元には配列の内容の変更が表示されます。(配列は参照型です)。

メソッドに表示parameterName = somethingされない場合は、必要ありませんByRef

パラメータのポイントはParamArray、暗黙的に作成された配列を渡すことです。
このような使用法でByRefは、効果はありません。

于 2010-11-10T16:36:33.723 に答える