オブジェクトはまったく渡されません。既定では、引数が評価され、その値は、呼び出すメソッドのパラメーターの初期値として値で渡されます。ここで重要な点は、値が参照型の参照であるということです-オブジェクト(またはnull)に到達する方法。そのオブジェクトへの変更は、呼び出し元から可視になります。ただし、別のオブジェクトを参照するようにパラメーターの値を変更しても、値渡し(すべてのタイプのデフォルト)を使用している場合は表示されません。
参照渡しを使用する場合は、パラメータータイプが値タイプか参照タイプかに関係なく、out
またはを使用する必要がありますref
。その場合、事実上、変数自体が参照によって渡されるため、パラメーターは引数と同じ格納場所を使用し、パラメーター自体への変更は呼び出し元に表示されます。
そう:
public void Foo(Image image)
{
// This change won't be seen by the caller: it's changing the value
// of the parameter.
image = Image.FromStream(...);
}
public void Foo(ref Image image)
{
// This change *will* be seen by the caller: it's changing the value
// of the parameter, but we're using pass by reference
image = Image.FromStream(...);
}
public void Foo(Image image)
{
// This change *will* be seen by the caller: it's changing the data
// within the object that the parameter value refers to.
image.RotateFlip(...);
}
これについて詳しく説明している記事があります。基本的に、「参照渡し」は、それが何を意味するかを意味するものではありません。