Nesneler hiç geçilmez. Varsayılan olarak, bağımsız değişken değerlendirilir ve değeri, aradığınız yöntemin parametresinin başlangıç değeri olarak değere göre iletilir. Şimdi önemli olan nokta, değerin referans türleri için bir referans olmasıdır - bir nesneye (veya null) ulaşmanın bir yolu. Bu nesnede yapılan değişiklikler arayandan görülebilir. Ancak, farklı bir nesneye başvurmak için parametrenin değerini değiştirerek olacaktır değil sizin için varsayılan değer tarafından geçiş kullanırken görünür tüm tipleri.
Tek tek başvuru kullanmak istiyorsanız ,out
veya ref
parametre türünün bir değer türü veya bir başvuru türü olup olmadığını kullanmanız gerekir . Bu durumda, değişkenin kendisi referans olarak geçirilir, bu nedenle parametre argüman ile aynı depolama konumunu kullanır - ve parametredeki değişiklikler arayan tarafından görülür.
Yani:
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(...);
}
Bu konuda çok daha ayrıntılı bir makalem var . Temel olarak, "referansla geç" ne demek istediğinizi ifade etmez.