কম্পিউটার

C# এ রেফ, আউট এবং কীওয়ার্ডের ব্যবহার কী?


C# এ, বেশিরভাগ পদ্ধতিতে শূন্য বা তার বেশি পরামিতি থাকতে পারে যা পদ্ধতিতে সরবরাহ করা আবশ্যক ডেটা সংজ্ঞায়িত করে। যেকোন কোড যে পদ্ধতিটিকে কল করে তাকে পদ্ধতিতে ডেটা (যাকে আর্গুমেন্ট বলা হয়) পাস করতে হবে। একটি পদ্ধতি তার ইনপুটগুলিকে প্যারামিটার হিসাবে ঘোষণা করে এবং সেগুলি আর্গুমেন্ট আকারে কলিং কোডের মাধ্যমে প্রদান করা হয়৷

উদাহরণস্বরূপ, নিম্নলিখিত পদ্ধতি এবং পরবর্তী পদ্ধতি কল বিবেচনা করুন।

স্ট্যাটিক অকার্যকর অভিবাদন(স্ট্রিং অভিবাদন){ কনসোল.WriteLine(অভিবাদন);}...অভিবাদন("হ্যালো");

উপরের উদাহরণে, অভিবাদন হল Greet() পদ্ধতির একটি প্যারামিটার, এবং "হ্যালো" হল পদ্ধতিতে পাস করা একটি আর্গুমেন্ট৷

আপনি যখন একটি পদ্ধতি কল করেন এবং আর্গুমেন্ট পাস করেন, তখন সেগুলি মান দ্বারা পাস হয়, যার মানে পদ্ধতিতে পাস করার সময় মানের একটি অনুলিপি তৈরি হয়। পদ্ধতির অভ্যন্তরে আর্গুমেন্টে করা কোনো পরিবর্তন মূল ভেরিয়েবলে প্রতিফলিত হয় না।

সিস্টেম ব্যবহার করে;int number =8;Increase(number);Console.WriteLine(number); // প্রিন্ট 8static void Increase(int num){ num =num + 1; Console.WriteLine(num); // প্রিন্ট 9}

যখন আপনি একটি রেফারেন্স টাইপ ভেরিয়েবল পাস করেন, যেমন একটি অবজেক্ট, C# এখনও রেফারেন্স কপি করে মান দ্বারা, কারণ ভেরিয়েবল রেফারেন্স ধারণ করে, প্রকৃত বস্তু নয়। সুতরাং যদিও রেফারেন্স ভেরিয়েবলের একটি অনুলিপি চারপাশে পাস করা হয়, তাদের উভয়ই মেমরিতে একই বস্তুকে উল্লেখ করে। সুতরাং পদ্ধতির ভিতরে ভেরিয়েবল দ্বারা বস্তুতে করা যেকোনো পরিবর্তন পদ্ধতির বাইরের ভেরিয়েবলের কাছে দৃশ্যমান।

ব্যবহার করে সিস্টেম;var john =new User{ Name ="John", বেতন =50000};Promote(john);Console.WriteLine(john.Salary); // প্রিন্ট 60000static void Promote(User u){ u.Salary +=10000; Console.WriteLine(u.Salary); // প্রিন্ট 60000}

যাইহোক, যদি আপনি পদ্ধতির ভিতরে ভেরিয়েবলের মান পরিবর্তন করেন, তবে সেই পরিবর্তনটি পদ্ধতির বাইরে প্রতিফলিত হয় না, কারণ শুধুমাত্র একটি অনুলিপি পরিবর্তন করা হয়েছে, প্রকৃত বস্তু নয়। উদাহরণ স্বরূপ, আমরা মেথডের ভিতরে আর্গুমেন্টটিকে নাল দিতে পারি, এবং আসল ভেরিয়েবল অপরিবর্তিত থাকবে।

ব্যবহার করে সিস্টেম;var john =new User{ Name ="John", বেতন =50000};Promote(john);Console.WriteLine(john.Salary); // প্রিন্ট 50000static void Promote(User u){ u =null;}

C# তিনটি ভিন্ন মডিফায়ার কীওয়ার্ডের অনুমতি দেয় যা ব্যবহার করে আপনি পদ্ধতির প্যারামিটার নিয়ন্ত্রণ করতে পারেন।

রেফ মডিফায়ার

C# আপনাকে রেফ ব্যবহার করে রেফারেন্সের মাধ্যমে প্যারামিটার পাস করতে দেয় সংশোধক ভেরিয়েবলটি পাস করা একটি রেফারেন্স টাইপ বা একটি মানের টাইপের অন্তর্গত কিনা তা কোন ব্যাপার না। প্যারামিটার এবং আর্গুমেন্ট উভয়ই একই মেমরি অবস্থান নির্দেশ করবে।

নিচের উদাহরণে, u কে null এ সেট করা জন ভেরিয়েবলটিকে নাল করে দেবে, যার ফলে নাল রেফারেন্স ব্যতিক্রম হবে।

উদাহরণ

ব্যবহার করে সিস্টেম;var john =new User{ Name ="John", বেতন =50000};Promote(ref john);Console.WriteLine(john.Salary); // System.NullReferenceExceptionstatic void Promote(ref User u){ u =null;}

একটি রেফ মডিফায়ার দিয়ে পাস করা আর্গুমেন্টটি পাস করার আগে অবশ্যই আরম্ভ করা উচিত।

আউট মডিফায়ার

এটি রেফ মডিফায়ারের অনুরূপ,

ছাড়া
  • ফাংশনে যাওয়ার আগে আর্গুমেন্টকে আরম্ভ করতে হবে না

  • ফাংশন থেকে বেরিয়ে আসার আগে আর্গুমেন্টকে অবশ্যই আরম্ভ করতে হবে (নিযুক্ত করা হয়েছে)।

নীচের উদাহরণে, হায়ার ফাংশনটি আউট মডিফায়ারের মাধ্যমে এটিতে পাস করা একটি নতুন ব্যবহারকারী অবজেক্ট শুরু করে। লক্ষ্য করুন যে ভেরিয়েবলটি ভেরিয়েবল জনকে হায়ার পদ্ধতিতে কল করার সময় ঘোষণা করা হয়৷

<প্রে>সিস্টেম ব্যবহার করে;হায়ার (আউট ইউজার জন);কনসোল।রাইটলাইন (জন.বেতন); // প্রিন্ট 50000static void Hire(out User u){ u =new User{ Name ="John", বেতন =50000 };}

রেফের মত সংশোধক, একটি পরিবর্তনশীল যা আউট দ্বারা চিহ্নিত মডিফায়ার রেফারেন্স দ্বারা পাস করা হয়।

প্রায়ই একটি আউট নিম্নরূপ −

একটি ফাংশন থেকে একাধিক রিটার্ন মান পেতে ভেরিয়েবল ব্যবহার করা হয়
ব্যবহার করে সিস্টেম;var john =new User{ Name ="John", বেতন =50000};bool shouldPromote =raise(john.Salary, out double hike);Console.WriteLine(shouldPromote); // TrueConsole.WriteLine($"Hike Amount ={hike}"); // 5000 স্ট্যাটিক বুল প্রিন্ট করে রিটার্ন হাইক <7000;}

মডিফায়ারে

এটি রেফের অনুরূপ এবং আউট প্যারামিটার, একটি in গ্রহণ করার পদ্ধতি ছাড়া আর্গুমেন্টের মান আর্গুমেন্ট পরিবর্তন করতে পারে না। যদি এটি চেষ্টা করে, C# কম্পাইলার একটি কম্পাইল-টাইম ত্রুটি তৈরি করে।

প্যারামিটার কম্পাইলারকে প্যারামিটার ভেরিয়েবলে একটি বড় মানের মেমরি কপি করা থেকে বাঁচায়, একই সময়ে অবজেক্টটিকে দুর্ঘটনাজনিত পরিবর্তন থেকে আটকায়। পদ্ধতিতে একটি বড় মান টাইপ পাস করার সময় এটি তাদের খুব দরকারী করে তোলে।

var পয়েন্ট =new Coord();Verify(point);static void Verify(Coord c){ // ত্রুটি:'in Coord' ভেরিয়েবলে বরাদ্দ করা যাবে না কারণ এটি একটি পঠনযোগ্য পরিবর্তনশীল c =new Coord(); }struct Coord{ পাবলিক int X; পাবলিক int Y;}

উদাহরণ

ব্যবহার করে System;class Program{static void Main(){int number =8; বৃদ্ধি (সংখ্যা); Console.WriteLine(Number); // প্রিন্ট 8 var john =নতুন ব্যবহারকারী { নাম ="জন", বেতন =50000 }; প্রচার (জন); Console.WriteLine(john.Salary); // প্রিন্ট 60000 Leave(john); Console.WriteLine(john.Salary); // প্রিন্ট 60000 LeaveByRef(ref john); Console.WriteLine(জন?.বেতন); // কিছুই প্রিন্ট করে না ইউজার ডেভ; হায়ার (আউট ডেভ); Console.WriteLine(dave.Salary); // প্রিন্ট 50000 } স্ট্যাটিক শূন্যতা বৃদ্ধি(int num){ num =num + 1; Console.WriteLine(num); // প্রিন্ট 9 } স্ট্যাটিক ভ্যাইড প্রমোট(ইউজার ইউ){ u. বেতন +=10000; Console.WriteLine(u.Salary); // প্রিন্ট 60000 } স্থির অকার্যকর ত্যাগ (ব্যবহারকারী u){ u =নাল; } স্ট্যাটিক ভ্যাইড LeaveByRef(ref User u){ u =null; } স্ট্যাটিক ভ্যাইড হায়ার (আউট ইউজার ইউ){ u =নতুন ইউজার{ নাম ="জন", বেতন =50000}; }}শ্রেণীর ব্যবহারকারী{ পাবলিক স্ট্রিং নাম { পেতে; সেট } পাবলিক int বেতন { পান; সেট }}

আউটপুট

9860000600006000050000

  1. C# এ একটি ইন্টারফেস এবং একটি ক্লাসের মধ্যে পার্থক্য কী?

  2. C# এ স্ট্রিং এবং স্ট্রিং এর মধ্যে পার্থক্য কি?

  3. C# এ রেফ এবং আউট প্যারামিটারের মধ্যে পার্থক্য কী?

  4. পাইথনে =+ এবং +=কি করে?