1

コードの別の部分によって呼び出される関数があり、次の署名があります。

public override bool DoSomething(Foo f, out string failed)
{
    failed = "I failed";
    _anotherClassMethodExpectingString.SetString(failed);
}

だから私の質問は - 他のクラスメソッドに、呼び出し元が「out」パラメーターで期待しているのと同じ文字列を送信する必要がある場合、呼び出し元に影響を与えることなく、同じ変数を送信できますか? 「out」パラメーターは私には少し混乱します..代わりに次のようなものを使用する必要がありました:

public override bool DoSomething(Foo f, out string failed)
{
   string localStr = "I failed";
   failed = localStr;
   _anotherClassMethodExpectingString.SetString(localStr);
}
4

4 に答える 4

2

呼び出している後続のメソッドも out パラメーターを使用していない限り、ローカル変数を定義する必要はありません。文字列は、通常のパラメーターの受け渡しの影響を受けません。

于 2013-01-29T18:02:33.803 に答える
1

メソッドの呼び出し元に 3 番目のメソッドからの変更が表示されることを期待していない、または望んでいない場合は、問題ありません。あなたの質問を正しく読んでいれば、これがあなたの意図のようです。

呼び出し元に 3 番目のメソッドによって導入された変更を反映させたい場合は、outそこにもパラメーターを指定するか、戻り値を介して変更を返す必要があります。戻り値は、元の out パラメーターに割り当ててから戻ります。

于 2013-01-29T18:02:11.083 に答える
0

またはなしのメソッドに対してパラメーターが宣言されている場合、パラメーターrefout値を関連付けることができます。その値はメソッドで変更できますが、制御が呼び出し元のプロシージャに戻ったときに、変更された値は保持されません。

文字列は.NETで不変であるため、文字列パラメータを指定せずに、またはその上でfailed任意のメソッドに渡しても安全であり、変更されないようにしてください。refout

于 2013-01-29T18:17:10.160 に答える
0

out パラメーターは、C++ のオブジェクトのポインターのようなものです。したがって、「out」定義者を使用しない場合、パラメーターの値は変更されません。

于 2013-01-29T18:21:54.280 に答える