এক্সেস মডিফায়ার
অ্যাক্সেস মডিফায়ারগুলি হল OOP’র ভাষায় কিছু কীওয়ার্ড যা ক্লাস, মেথড, ফিল্ড ইত্যাদি সদস্যদের Accessibility প্রদান করে।
পাবলিক
- এটি “public” কীওয়ার্ড দ্বারা শুরু হয়।
- এক্ষেত্রে, অ্যাক্সেস লেভেল সর্বত্র। এটি ক্লাসের মধ্যে থেকে, ক্লাসের বাইরে, প্যাকেজের মধ্যে এবং প্যাকেজের বাইরে থেকে অ্যাক্সেস করা যেতে পারে।
প্রাইভেট
- এটি “private” কীওয়ার্ড দ্বারা শুরু হয়।
- এক্ষেত্রে, অ্যাক্সেস লেভেল শুধুমাত্র একই ক্লাসের মধ্যে। এটি ক্লাসের বাইরে থেকে অ্যাক্সেস করা যায় না।
প্রোটেক্টেড
- এটি “protected” কীওয়ার্ড দ্বারা শুরু হয়।
- কোডটি একই ক্লাসের মধ্যে বা সেই ক্লাস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত একটি ক্লাসে অ্যাক্সেসযোগ্য।
- এক্ষেত্রে, অ্যাক্সেস লেভেল প্যাকেজের মধ্যে এবং প্যাকেজের বাইরে উত্তরাধিকারসূত্রে (Inheritance) প্রাপ্ত চাইল্ড ক্লাসের মধ্যে। চাইল্ড ক্লাস ছাড়া প্যাকেজের বাইরে থেকে এটি অ্যাক্সেস করা যাবে না।
Modifier | Class | Package | Subclass | World |
---|---|---|---|---|
public | ✅ | ✅ | ✅ | ✅ |
private | ✅ | ❌ | ❌ | ❌ |
protected | ✅ | ✅ | ✅ | ❌ |
No modifier | ✅ | ✅ | ❌ | ❌ |
জাভা’তে মূলত দুধরণের মডিফায়ার রয়েছে।
এক্সেস মডিফায়ার
পূর্বেই আমরা প্রাইভেট, পাবলিক, প্রোটেক্টেড নিয়ে আলোচনা করেছি, এর বাইরেও আরেকটি মডিফায়ার রয়েছে, যাকে বলা হয় “ডিফল্ট” মডিফায়ার।
ডিফল্ট:
- এটিতে কোন কীওয়ার্ড ব্যবহৃত হয় না। মূলত, কোন এক্সেস মডিফায়ার ব্যবহৃত না হলে, সেক্ষেত্রে এটি ডিফল্ট হিসেবে ব্যবহৃত হয়।
- এক্ষেত্রে, অ্যাক্সেস লেভেল শুধুমাত্র প্যাকেজের মধ্যেই থাকে। এটি প্যাকেজের বাইরে থেকে অ্যাক্সেস করা যাবে না।
উদাহরণঃ
public class Example { public String publicField = “This is a public field”; private String privateField = “This is a private field”; protected String protectedField = “This is a protected field”; public void publicMethod() { System.out.println(“This is a public method”); } private void privateMethod() { System.out.println(“This is a private method”); } protected void protectedMethod() { System.out.println(“This is a protected method”); } } public class AnotherClass { public static void main(String[] args) { Example example = new Example(); // Accessing public members from AnotherClass is allowed System.out.println(example.publicField); // Valid example.publicMethod(); // Valid // Private members are not accessible from AnotherClass // The following lines would result in a compilation error // System.out.println(example.privateField); // Invalid // example.privateMethod(); // Invalid // Protected members can be accessed from AnotherClass, but only if it’s a subclass of Example SubclassOfExample subExample = new SubclassOfExample(); System.out.println(subExample.protectedField); // Valid subExample.protectedMethod(); // Valid } } class SubclassOfExample extends Example { public void accessProtectedField() { System.out.println(protectedField); // OK, because SubclassOfExample is a subclass of Example } }
সি#
Modifier | Within The Class | Same Assembly – Derived Class | Same Assembly – Non-derived Class | Different Assembly – Derived Class | Different Assembly -Non-derived Class |
---|---|---|---|---|---|
public | ✅ | ✅ | ✅ | ✅ | ✅ |
private | ✅ | ❌ | ❌ | ❌ | ❌ |
protected | ✅ | ✅ | ❌ | ✅ | ❌ |
internal | ✅ | ✅ | ✅ | ❌ | ❌ |
private protected | ✅ | ✅ | ❌ | ❌ | ❌ |
Protected internal | ✅ | ✅ | ✅ | ✅ | ❌ |
উদাহরণঃ
public class Example { public string publicField = “This is a public field”; private string privateField = “This is a private field”; protected string protectedField = “This is a protected field”; public void PublicMethod() { Console.WriteLine(“This is a public method”); } private void PrivateMethod() { Console.WriteLine(“This is a private method”); } protected void ProtectedMethod() { Console.WriteLine(“This is a protected method”); } } public class AnotherClass { public static void Main(string[] args) { Example example = new Example(); // Accessing public members from AnotherClass is allowed Console.WriteLine(example.publicField); // OK example.PublicMethod(); // OK // Private members are not accessible from AnotherClass // The following lines would result in a compilation error // Console.WriteLine(example.privateField); // Error // example.PrivateMethod(); // Error // Protected members can be accessed from AnotherClass, but only if it’s a subclass of Example SubclassOfExample subExample = new SubclassOfExample(); Console.WriteLine(subExample.protectedField); // OK subExample.ProtectedMethod(); // OK } } public class SubclassOfExample : Example { public void AccessProtectedField() { Console.WriteLine(protectedField); // OK, because SubclassOfExample is a subclass of Example } }
সি# এ, পাবলিক, প্রাইভেট, প্রোটেক্টেড ছাড়াও বেশ কিছু এক্সেস মডিফায়ার রয়েছে। যেমনঃ
ইন্টার্নাল
- এটি “internal” কীওয়ার্ড দ্বারা শুরু হয়।
- এক্ষেত্রে, এক্সেস লেভেল শুধুমাত্র একই এসেম্বলি (assembly) এর মধ্যে অ্যাক্সেসযোগ্য হয় যা এসেম্বলি স্কোপ (assembly scope) নামেও পরিচিত। অন্য কথায়, internal কীওয়ার্ড ব্যবহৃত হলে তা অন্যান্য এসেম্বলিগুলি সরাসরি এটি অ্যাক্সেস করতে পারে না।
উদাহরণঃ
internal class BaseClass { public static int intM = 0; } // An attempt to instantiate BaseClass will produce an error. class TestAccess { static void Main() { var myBase = new BaseClass(); // Invalid } } public class BaseClass { internal static int intM = 0; } public class TestAccess { static void Main() { var myBase = new BaseClass(); // Valid BaseClass.intM = 444; // Invalid } }