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";
}
ডসোমিংথিংয়ের পরে, মূলটিকে tউল্লেখ করে না new TestRef, তবে সম্পূর্ণ ভিন্ন একটি বিষয়কে বোঝায়।
আপনি যদি কোনও অপরিবর্তনীয় বস্তুর মান পরিবর্তন করতে চান তবে এটি কার্যকরও হতে পারে, যেমন ক string। stringএকবার তৈরি হয়ে গেলে এর মান আপনি পরিবর্তন করতে পারবেন না । তবে একটি ব্যবহার করে 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;
}