সাধারণত, C#-তে সব টাইপ দুটি প্রধান ক্যাটাগরিতে ভাগ করা যায় — ভ্যালু টাইপ এবং রেফারেন্স টাইপ। আসুন প্রতিটি টাইপকে বিস্তারিত দেখি।
ভ্যালু টাইপ (Value Types)
ভ্যালু টাইপের ভেরিয়েবলগুলো সরাসরি তাদের ডেটা ধারণ করে। প্রতিটি ভেরিয়েবলের নিজস্ব ডেটার কপি থাকে। তাই একটি ভ্যালু টাইপের ভেরিয়েবল দ্বারা অন্য কোনো অবজেক্ট মডিফাই করা অসম্ভব।
একটি ভ্যালু টাইপ নিচের কোনো একটি টাইপ হতে পারে —
- সকল न्यूमেরিক টাইপ, যেমন int, float, এবং double
- char এবং bool টাইপ
- struct টাইপ অথবা
- enumeration টাইপ।
একটি ভ্যালু টাইপ সিম্পলি ভ্যালু ধারণ করে। উদাহরণস্বরূপ, ইন্টিজার টাইপে আসল নাম্বার থাকে, রেফারেন্স টাইপের মত নাম্বারের পয়েন্টার নয়।
একটি কাস্টম ভ্যালু টাইপ তৈরি করতে, আপনি struct ব্যবহার করতে পারেন। উদাহরণস্বরূপ —
public struct Point { public int X; public int Y; } var p1 = new Point();মেমরিতে, একটি Point ইনস্ট্যান্স নিচের মতো রিপ্রেজেন্ট করা হয় —

আপনি যখন একটি ভ্যালু টাইপ ভেরিয়েবল অন্য ভেরিয়েবলে অ্যাসাইন করেন, অ্যাসাইনমেন্ট অপারেশন অ্যাসাইন করা ভ্যালুর একটি কপি তৈরি করে। উদাহরণস্বরূপ,
Point p2 = p1;

রেফারেন্স টাইপ (Reference Types)
রেফারেন্স টাইপের ভেরিয়েবলগুলো তাদের অবজেক্টের একটি রেফারেন্স সংরক্ষণ করে। দুটি ভিন্ন ভেরিয়েবল একই অবজেক্টের রেফারেন্স ধারণ করতে পারে। একটি ভেরিয়েবল অবজেক্টে যে পরিবর্তন আনবে, সেটি দ্বিতীয় ভেরিয়েবলদ্বারা দৃশ্যমান হবে।
একটি রেফারেন্স টাইপ নিচের টাইপগুলোকে অন্তর্ভুক্ত করে —
- String
- Class
- Array
- Delegate
- Interface
উদাহরণস্বরূপ, আপনি একটি ক্লাস তৈরি করতে পারেন, যা একটি রেফারেন্স টাইপ —
public class Point{ public int X; public int Y; } var p1 = new Point();
আপনি যখন একটি রেফারেন্স টাইপ ভেরিয়েবল অন্য ভেরিয়েবলে অ্যাসাইন করেন, অ্যাসাইনমেন্ট অপারেশন সিম্পলি রেফারেন্স কপি করে, আসল অবজেক্ট কপি করে না।
Point p2 = p1;

উদাহরণ
using System; class Program{ static void Main(){ var p1 = new Point { X = 10 }; Point p2 = p1; p2.X = 20; Console.WriteLine("Value Type"); Console.WriteLine(p1.X); Console.WriteLine(p2.X); var u1 = new User { Age = 10 }; User u2 = u1; u2.Age = 20; Console.WriteLine("Reference Type"); Console.WriteLine(u1.Age); Console.WriteLine(u2.Age); } } public struct Point{ public int X; public int Y; } public class User{ public int Age { get; set; } }আউটপুট
Value Type 10 20 Reference Type 20 20