ผ่าน a refหากคุณต้องการเปลี่ยนสิ่งที่เป็นวัตถุ:
TestRef t = new TestRef();
t.Something = "Foo";
DoSomething(ref t);
void DoSomething(ref TestRef t)
{
  t = new TestRef();
  t.Something = "Not just a changed t, but a completely different TestRef object";
}
หลังจากเรียก DoSomething tไม่ได้อ้างถึงต้นฉบับnew TestRefแต่หมายถึงวัตถุที่แตกต่างอย่างสิ้นเชิง
stringซึ่งอาจเป็นประโยชน์เกินไปถ้าคุณต้องการที่จะเปลี่ยนค่าของวัตถุที่ไม่เปลี่ยนรูปเช่นการ คุณไม่สามารถเปลี่ยนค่าของstringครั้งเดียวที่มันถูกสร้างขึ้น แต่ด้วยการใช้ a refคุณสามารถสร้างฟังก์ชั่นที่เปลี่ยนสตริงสำหรับอีกอันที่มีค่าต่างกัน
แก้ไข: ตามที่คนอื่นพูดถึง มันไม่ควรใช้refเว้นแต่จะจำเป็น การใช้refให้อิสระกับวิธีการในการเปลี่ยนอาร์กิวเมนต์สำหรับสิ่งอื่นผู้โทรของวิธีจะต้องถูกเข้ารหัสเพื่อให้แน่ใจว่าพวกเขาจัดการความเป็นไปได้
นอกจากนี้เมื่อชนิดพารามิเตอร์เป็นวัตถุแล้วตัวแปรวัตถุจะทำหน้าที่อ้างอิงถึงวัตถุเสมอ ซึ่งหมายความว่าเมื่อใช้refคำหลักคุณจะได้รับการอ้างอิงถึงการอ้างอิง สิ่งนี้อนุญาตให้คุณทำสิ่งต่าง ๆ ตามที่อธิบายไว้ในตัวอย่างด้านบน แต่เมื่อชนิดพารามิเตอร์เป็นค่าดั้งเดิม (เช่นint) ดังนั้นหากพารามิเตอร์นี้ถูกกำหนดให้ภายในวิธีการค่าของอาร์กิวเมนต์ที่ถูกส่งผ่านจะมีการเปลี่ยนแปลงหลังจากที่วิธีการส่งกลับ:
int x = 1;
Change(ref x);
Debug.Assert(x == 5);
WillNotChange(x);
Debug.Assert(x == 5); // Note: x doesn't become 10
void Change(ref int x)
{
  x = 5;
}
void WillNotChange(int x)
{
  x = 10;
}