0


2

次のようなコードスニペットがあるとします。 gooはfooを呼び出し、gooとfooによって作成されたDataTableはRows.Addのみを呼び出します。 それからgooはfooからのDataTableインスタンスの更新されたデータを使います。

私の質問では、私のシナリオでは、refパラメータを指定して使用した場合と使用しなかった場合の違いについて説明します。

C#.Net 3.5 VSTS2008を使用しています。

void foo(ref DataTable dt){// Rowを呼び出す。dtに追加}

void goo(){DataTable dt1 = ...; // DataTableの新しいインスタンスをここに作成しますfoo(ref dt1); //ここでfooによってDataTableの更新された内容を読む}

5 Answer


4


dt`が指すものを変更するつもりなら、 ref`を使うだけです。 例えば、あなたがそれを_異なる_ DataTable(あるいは、 'DataTable’から派生した型)に置き換えたい場合。

この場合、あなたはただ_using_ dt`なので、 ref`を使う理由はありません。 DataTable`はクラスなので、それに対して行われた変更は foo`の外から見えます。


3


別のオブジェクトを取り戻すつもりがない限り、refパラメータは必要ありません。 DataTableは参照オブジェクトなので、実際に渡しているのはポインタへのポインタです。 あなたが意図しているのがあなたのインスタンスに変更を加えるために呼び出された関数だけであるならば、あなたはrefを必要としません。


2


その場合、refまたはnon-refパラメータを使用することの間には、まったくゼロの違いがあります。 この状況でrefパラメータでできることは、 "dt = new DataTable()"だけで、メイン関数に影響を与えます。

参照パラメータは必要なときにだけ使用することをお勧めします。それ以外の場合は、コードが複雑になります。


0


私が見ている唯一の違い/利点は、あなたが参照によってそれを渡さなかったならば、コードはより明確になるということです。


0


他の人たちはすでに答えています、より多くの情報が欲しいならばあなたは私の C#でパラメータを渡すことについての記事を読みたいかもしれません。

(誰もが正しい - オブジェクト内のデータを変更したいだけなら、引数を値渡しで構いません。 呼び出し元の変数がどのオブジェクトを参照しているかを変更したい場合は、参照渡ししてください。