3

違いは何ですか

public function Foo(ref Bar bar)
{
   bar.Prop = 1;
}

public function Foo(Bar bar)
{
   bar.Prop = 1;
}

本質的に「ref」のポイントは何ですか。オブジェクトは常に参照によるものではありませんか?

4

2 に答える 2

10

重要なのは、実際にobjectを渡すことは決してないということです。参照を渡します。引数自体は、参照または値で渡すことができます。パラメータ値自体を変更すると、たとえば別の参照に設定しnullたり、別の参照に設定したりすると、動作が異なります。このref変更により、呼び出し元の変数に影響します。渡された値のコピーrefにすぎないため、呼び出し元は変数への変更を認識しません。

詳細については、引数の受け渡しに関する私の記事を参照してください。

于 2009-04-08T11:17:55.270 に答える
9

はい。しかし、これを行う場合:

public function Foo(ref Bar bar)
{
   bar = new Bar();
}

public function Foo(Bar bar)
{
    bar = new Bar();
}

そうすれば違いがわかります。最初は参照を参照に渡すため、この場合、バーは新しいオブジェクトに変更されます。第二に、そうではありません。

于 2009-04-08T11:13:57.823 に答える