0

重複の可能性:
VB.Net の参照

中規模の Customer db オブジェクトを渡したいのですが、不要だと思うので値渡しはしたくありません。

C++ では、大きなオブジェクトがある場合、それを値で渡すのは効率的ではありませんでした。これは、そこからコピーが作成されたため、(渡されたオブジェクトの) コピーが作成されないように参照渡ししていたためです。以前はパラメーターを定数として渡していました。これは、関数内のオブジェクトを変更しようとすると、渡されたオブジェクトに害を与えないようにコンパイラーが許可しないためです (参照によって渡されたため)。これをvb.netで模倣することは可能ですか、それとも必要ありませんか?

4

2 に答える 2

3

私の強い疑いは、VB で値がどのように渡されるかについて混乱しているということです。

CustomerDb タイプがclassの場合、そのタイプのすべての式には、すでに参照されている値があります。デフォルトでは、その参照は値で渡されますが、渡されるのは参照のみであり、オブジェクト全体ではありません。

CustomerDb 型が構造体の場合、実際には毎回値全体を渡すことになります。とにかく、それをクラスに変更することを強く検討する必要があります...

もちろん、参照を値渡ししても、オブジェクトがメソッドで変更されるのを止めるわけではありませんが、パラメーター変数自体への変更が呼び出し元のコードに反映されないことを意味します。

C# パラメーターの受け渡しに関する私の記事を読んでください。VB でもほとんど同じです。

于 2013-01-30T20:43:47.143 に答える
1

.NET では、クラス (私はそうだと思いますCustomer) は参照型です。参照型を引数として渡すと、参照 (ポインター) がオブジェクトに渡されます。したがって、クラスを渡すことは完全に効率的であり、コピーは作成されません。

参照によってクラスを渡す場合、メソッドは参照 (ポインター) を変更でき、呼び出し元のメソッドに反映されます。

引数を読み取り専用にする簡単な方法があるかどうかは、頭の中でわかりません。参照型は参照を渡すため、オブジェクトへの変更はオリジナルに反映されます。オリジナルを変更したくない場合は、コピーが必要になることがあります。

于 2013-01-30T20:42:21.387 に答える