অ্যাক্সেস মডিফায়ার ক্লাস, স্ট্রাক্ট, মেম্বারের দৃশ্যমানতা (visibility) বা স্কোপ নিয়ন্ত্রণ করে। C#-তে মোট ৬টি অ্যাক্সেস মডিফায়ার রয়েছে।
৬টি অ্যাক্সেস মডিফায়ার
| মডিফায়ার | স্কোপ | কীওয়ার্ড |
| public | সর্বত্র অ্যাক্সেসযোগ্য (কোনো রেস্ট্রিকশন নেই) | public |
| private | শুধু আপনার ক্লাস/স্ট্রাক্টের ভিতরে | private |
| protected | আপনার ক্লাস + ডেরাইভড ক্লাস (ইনহেরিট্যান্স) | protected |
| internal | একই অ্যাসেম্বলি (প্রজেক্ট) এর ভিতরে | internal |
| protected internal | একই অ্যাসেম্বলি OR ডেরাইভড ক্লাস (যেকোনো অ্যাসেম্বলি) | protected internal |
| private protected | একই অ্যাসেম্বলির ডেরাইভড ক্লাস (C# 7.2+) | private protected |
দৃষ্টান্ত: Public
public class Person {
public string Name = "Mark"; // সব জায়গা থেকে অ্যাক্সেসযোগ্য
}
class Program {
static void Main() {
var p = new Person();
Console.WriteLine(p.Name); // ✅ OK
}
}
দৃষ্টান্ত: Private
public class Person {
private string Name = "Mark"; // শুধু Person ক্লাসের ভিতরে
}
class Program {
static void Main() {
var p = new Person();
Console.WriteLine(p.Name); // ❌ Error: inaccessible due to protection level
}
}
দৃষ্টান্ত: Protected
public class Person {
protected string Name = "Mark";
}
public class Employee : Person {
public void Print() => Console.WriteLine(Name); // ✅ OK (ডেরাইভড ক্লাস)
}
class Program {
static void Main() {
var e = new Employee();
e.Print(); // Mark
var p = new Person();
Console.WriteLine(p.Name); // ❌ Error
}
}
দৃষ্টান্ত: Internal
// Project 1 (MyApplication)
public class Person {
internal string Name = "Mark"; // একই প্রজেক্টে অ্যাক্সেসযোগ্য
}
// Project 2 (রেফারেন্স যোগ করে)
using MyApplication;
class OtherClass {
void Test() {
var p = new Person();
Console.WriteLine(p.Name); // ❌ Error: inaccessible
}
}
দৃষ্টান্ত: Protected Internal
// Project 1
public class Person {
protected internal string Name = "Mark";
}
// Project 2 - ইনহেরিট করলে অ্যাক্সেস পায়
public class Manager : Person {
public void Print() => Console.WriteLine(Name); // ✅ OK
}
// Project 2 - ইনহেরিট ছাড়া অ্যাক্সেস পায় না
class Other {
void Test() {
var p = new Person();
Console.WriteLine(p.Name); // ❌ Error
}
}
দৃষ্টান্ত: Private Protected (C# 7.2+)
// Project 1
public class Base {
private protected string Secret = "TopSecret";
}
public class DerivedInSameAssembly : Base {
void Test() => Console.WriteLine(Secret); // ✅ OK
}
// Project 2 (রেফারেন্স যোগ করে)
public class DerivedInOtherAssembly : Base {
void Test() => Console.WriteLine(Secret); // ❌ Error: inaccessible
}
ডিফল্ট অ্যাক্সেস মডিফায়ার
| টাইপ | ডিফল্ট | নোট |
| Class (টপ-লেভেল) | internal | public বা internalই দেয়া যায় |
| Class (নেস্টেড) | private | |
| Struct | internal | |
| Interface | internal | |
| Enum | internal | |
| Delegate | internal | |
| Field/Method/Property | private | ক্লাস/স্ট্রাক্টের ভিতরে |
সেরা প্র্যাকটিস
- ফিল্ড সবসময়
private রাখুন (এনক্যাপসুলেশন)
- পাবলিক API শুধু প্রয়োজনীয় জিনিসই এক্সপোজ করুন
- লাইব্রেরি লেখার সময়
internal ব্যবহার করে ইন্টারন্যাল ডিটেইল লুকান
protected কম ব্যবহার করুন — কম্পোজিশন ভালো