একটি ক্লাস C#-তে একটি অপরিহার্য টাইপ। আমরা একটি ক্লাসকে সমস্যা ডোমেনের প্রাসঙ্গিক অবজেক্টগুলোর জন্য একটি ব্লুপ্রিন্ট হিসেবে ভাবতে পারি। এটি একটি টেমপ্লেট যেখান থেকে আমরা অবজেক্ট তৈরি করি, সেই সেট অবজেক্টের মধ্যে শেয়ার করা কাঠামো এবং আচরণ ডিফাইন করে। সহজ কথায়, একটি ক্লাস হলো একটি কুকি-কাটার, এবং অবজেক্টগুলো হলো сами কুকিগুলো।
একটি ক্লাস এনক্যাপসুলেশনও সক্ষম করে, যা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এ একটি গুরুত্বপূর্ণ কনসেপ্ট। এর অর্থ হলো ডেটা এবং ডেটা ওপর কাজ করার অপারেশনগুলো একটি জায়গায় কাম্বাইন করা এবং সেই অবজেক্টের ইউজারদের জন্য একটি সিম্পল API প্রদান করা। একটি ক্লাস আমাদের ডেটা এনক্যাপসুলেট করতে দেয় এবং অন্য ক্লাস থেকে অপ্রাসঙ্গিক ডিটেইল লুকাতে দেয়।
আমরা class কীওয়ার্ড ব্যবহার করে একটি ক্লাস তৈরি করতে পারি, তারপর ক্লাসের নাম।
// User.cs public class User{ private string name; private int salary; public void Promote(){ salary += 1000; } }উপরের উদাহরণে, User হলো একটি ক্লাস যা ইউজারদের রিপ্রেজেন্ট করে। ক্লাস দুটি ডেটা এনক্যাপসুলেট করে — name এবং salary। এগুলো পরিচিত ক্লাস ফিল্ড, যা ইউজারদের নাম এবং স্যালারি ধারণ করে। এতে একটি মেথডও রয়েছে Promote() নামের, যা ইউজারের স্যালারি বাড়ায়।
প্রতিটি ক্লাসের একটি সংশ্লিষ্ট অ্যাক্সেস মডিফায়ার থাকে যা কন্ট্রোল করে ক্লাসটি অন্য ক্লাসগুলোর কাছে দৃশ্যমান হবে কিনা। অ্যাক্সেস মডিফায়ারের জন্য আমরা পাঁচটি সম্ভাব্য ভ্যালু দিতে পারি।
| Access Modifier | Description |
|---|---|
| public | Unlimited access |
| protected | Limited access to the derived classes |
| internal | Limited access to the assembly |
| protected internal | Limited access to the assembly or the derived classes |
| private | No outside access |
এক ক্লাসের ইনস্ট্যান্স তৈরি করতে, আমরা new কীওয়ার্ড ব্যবহার করতে পারি। new অপারেটর অবজেক্টের ডেটার জন্য প্রয়োজনীয় বাইট সংখ্যা ক্যালকুলেট করে এবং অবজেক্টের জন্য মেমরি অ্যালোকেট করে। তারপর এটি নতুন তৈরি অবজেক্টের একটি পয়েন্টার (রেফারেন্সও বলা হয়) রিটার্ন করে।
var alice = new User(); var bob = new User();
এই রেফারেন্সটি তারপর = সাইনের বাম পাশের ভেরিয়েবলে স্টোর হয়। উপরের উদাহরণে, Alice এবং Bob নতুন তৈরি অবজেক্টগুলোর রেফারেন্স বা পয়েন্টার ধারণ করে।

C#-তে ক্লাস নেমিং কনভেনশন PascalCase ফলো করে যা একটি কম্পাউন্ড ওয়ার্ডের প্রতিটি শব্দের প্রথম অক্ষর ক্যাপিটালাইজ করে, যেমন StringBuilder, UserController, ইত্যাদি। ক্লাসের নাম মিলে যাওয়া ফাইল নেমে ক্লাস তৈরি করা বাধ্যতামূলক নয়। যাইহোক, অধিকাংশ C# প্রজেক্টে এটি একটি কনভেনশন।
কনস্ট্রাক্টর
উপরের উদাহরণে, যখন আমরা User ক্লাসের ইনস্ট্যান্স তৈরি করলাম, অর্থাৎ alice এবং bob, আমরা তাদের প্রাথমিক নাম এবং স্যালারি দেয়নি। প্রায়শই একটি নতুন তৈরি অবজেক্টকে তার কাজ করার জন্য কিছু ইনফরমেশন প্রয়োজন হয়, এবং ক্লাস ডেটা ইনিশিয়ালাইজ করার জন্য একটি কনস্ট্রাক্টর ব্যবহার করা হয়।
আমরা একটি কনস্ট্রাক্টর যোগ করে একটি ইউজারকে তার নাম এবং স্যালারি দিতে পারি নিচের মত —
public class User{ private string name; private int salary; public User(string name, int salary){ this.name = name; this.salary = salary; } public void Promote(){ salary += 1000; } }একটি কনস্ট্রাক্টর থাকলে আমরা নতুন ইনস্ট্যান্স তৈরি করার সময় ইউজারের নাম এবং স্যালারি পাস করতে পারি।
var alice = new User("Alice", 50000); var bob = new User("Bob", 45000);এক ক্লাসে একাধিক কনস্ট্রাক্টর থাকতে পারে। একাধিক কনস্ট্রাক্টর থাকলে আমরা ক্লাসকে ভিন্ন ভিন্নভাবে ইনিশিয়ালাইজ করতে পারি। উদাহরণস্বরূপ, আমরা অন্য একটি কনস্ট্রাক্টর যোগ করতে পারি যা শুধু ইউজারের নাম নেয় এবং একটি ডিফল্ট স্যালারি অ্যাসাইন করে।
public User(string name){ this.name = name; this.salary = 50000; }উদাহরণ
using System; class Program{ static void Main(){ var alice = new User(); alice.Print(); var bob = new User(); bob.Print(); var chris = new User("Chris", 50000); chris.Print(); var debs = new User("Debs", 45000); debs.Print(); var scott = new User("Scott"); scott.Print(); } } public class User{ private string name; private int salary; public User(){ } public User(string name){ this.name = name; this.salary = 50000; } public User(string name, int salary){ this.name = name; this.salary = salary; } public void Promote(){ salary += 1000; } public void Print(){ Console.WriteLine($"{name}: {salary}"); } }আউটপুট
: 0 : 0 Chris: 50000 Debs: 45000 Scott: 50000