কম্পিউটার টিউটোরিয়াল

C#-তে অ্যাক্সেস মডিফায়ারদের প্রকারভেদ

অ্যাক্সেস মডিফায়ার ক্লাস, স্ট্রাক্ট, মেম্বারের দৃশ্যমানতা (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 (টপ-লেভেল)internalpublic বা internalই দেয়া যায়
Class (নেস্টেড)private
Structinternal
Interfaceinternal
Enuminternal
Delegateinternal
Field/Method/Propertyprivateক্লাস/স্ট্রাক্টের ভিতরে

সেরা প্র্যাকটিস

  • ফিল্ড সবসময় private রাখুন (এনক্যাপসুলেশন)
  • পাবলিক API শুধু প্রয়োজনীয় জিনিসই এক্সপোজ করুন
  • লাইব্রেরি লেখার সময় internal ব্যবহার করে ইন্টারন্যাল ডিটেইল লুকান
  • protected কম ব্যবহার করুন — কম্পোজিশন ভালো
  1. C# ASP.NET WebAPI-তে ফিল্টারের বিভিন্ন প্রকার কী কী?

  2. পাইথনে বিভিন্ন ধরনের বিটওয়াইজ অপারেটর কী কী?

  3. পাইথনে বিভিন্ন ধরনের আইডেন্টিটি অপারেটর কী কী?

  4. পাইথনে বিভিন্ন ধরনের কোটেশন কী কী?