ุงู„ู€ Access Modifiers ู‡ูŠ keywords ููŠ C# ุจุชุญุฏุฏ ู…ูŠู† ูŠู‚ุฏุฑ ูŠุดูˆู ูˆูŠุณุชุฎุฏู… ุงู„ู€ types (ุฒูŠ ุงู„ู€ class ุฃูˆ struct) ูˆุงู„ู€ members (ุฒูŠ ุงู„ู€ methods ุฃูˆ variables) ุจุชุงุนุชูƒ.

ูˆุธูŠูุชู‡ุง ุฅู†ู‡ุง ุชุญุฏุฏ ู…ุณุชูˆู‰ ุงู„ูˆุตูˆู„ ุฃูˆ ุงู„ู€ accessibility scopeุŒ ุจู…ุนู†ู‰ ุชุงู†ูŠุŒ ู…ูŠู† ูŠู‚ุฏุฑ ูŠูˆุตู„ ู„ู„ูƒูˆุฏ ุฏู‡ ูˆููŠู† ุจุงู„ุธุจุทุŒ ุณูˆุงุก ุฌูˆู‡ ู†ูุณ ุงู„ู€ Library ุฃูˆ ู„ูˆ ุญุฏ ุงุณุชุฎุฏู… ุงู„ู€ Library ุฏูŠ ููŠ ู…ุดุฑูˆุน ุชุงู†ูŠ.

ุฌูˆู‡ ุงู„ู€ Namespace ุจู†ู‚ุฏุฑ ู†ูƒุชุจ ุฃุฑุจุน ุฃู†ูˆุงุน ุฃุณุงุณูŠุฉ:

  • ุงู„ู€ Class ูˆ Interface (ูˆุฏูˆู„ Reference Types)
  • ุงู„ู€ Struct ูˆ Enum (ูˆุฏูˆู„ Value Types)

ุฌูˆู‡ ูƒู„ ู†ูˆุน ู…ู† ุฏูˆู„ุŒ ุจูŠูƒูˆู† ููŠู‡ ุนู†ุงุตุฑ ุชุงู†ูŠุฉ ุฒูŠ ุงู„ู€ functions ูˆุงู„ู€ variablesุŒ ูˆุงู„ู€ Access Modifiers ู‡ูŠ ุงู„ู„ูŠ ุจุชุชุญูƒู… ููŠ ูƒู„ ุฏู‡.

Access Modifiers Overview

Comparison Table

ุงู„ุฌุฏูˆู„ ุฏู‡ ุจูŠู„ุฎุต ุฅู…ูƒุงู†ูŠุฉ ุงู„ูˆุตูˆู„ ู„ูƒู„ modifier:

Access ModifierInside ClassIn Same NamespaceInherited ClassAnother Class
PublicYesYesYesYes
PrivateYesNoNoNo
ProtectedYesNoYesNo
InternalYesYesNoNo
Protected InternalYesYesYesNo
Private ProtectedYesNoYes (in same Library)No

Valid Modifiers per Scope

ุงู„ุฌุฏูˆู„ ุฏู‡ ุจูŠูˆุถุญ ุงู„ู€ Access Modifiers ุงู„ู…ุชุงุญุฉ ู„ูƒู„ ุฌุฒุก ู…ู† ุงู„ูƒูˆุฏ ูˆุงู„ู€ default ุจุชุงุนู‡ุง.

ScopeContainsValid Access Modifiers
NamespaceClass, Struct, Interface, Enuminternal (Default), public
ClassAttributes, Properties, Function, EventAll Access Modifiers (Default โ†’ private)
StructAttributes, Properties, Function, Eventprivate (Default), internal, public
InterfaceProperty Signature, Method Signature, Default Implemented Methodpublic (Default)
EnumLabelsN/A for labels

Detailed Explanations

Public

  • ุงู„ู€ member ุจูŠูƒูˆู† ู…ุชุงุญ ู„ู„ุงุณุชุฎุฏุงู… ู…ู† ุฃูŠ ู…ูƒุงู† ููŠ ุงู„ุจุฑู†ุงู…ุฌ ุจุฏูˆู† ุฃูŠ ู‚ูŠูˆุฏ.
public class MyClass
{
    // This variable can be accessed from anywhere
    public int myVar = 5;
}
 
class Program
{
    static void Main()
    {
        MyClass obj = new MyClass();
        Console.WriteLine(obj.myVar); // Works perfectly
    }
}

Private

  • ุงู„ูˆุตูˆู„ ุจูŠูƒูˆู† ู…ู‚ุชุตุฑ ุนู„ู‰ ุงู„ู€ class ุฃูˆ ุงู„ู€ struct ุงู„ู„ูŠ ุงุชุนุฑู ุฌูˆุงู‡ ุจุณ.
  • ุฃูŠ member ุจูŠูƒูˆู† private ุจูŠุธู‡ุฑ ุฌู†ุจู‡ ุนู„ุงู…ุฉ ู‚ูู„ ููŠ ุงู„ู€ IntelliSense.
  • ู…ุด ุจูŠูƒูˆู† ู…ุชุงุญ ุจุฑู‡ ุงู„ู€ scope ุจุชุงุนู‡ ู†ู‡ุงุฆูŠู‹ุง.
public class MyClass
{
    private int myVar = 5;
 
    public void ShowVar()
    {
        // Accessible inside the same class
        Console.WriteLine(myVar); 
    }
}
 
class Program
{
    static void Main()
    {
        MyClass obj = new MyClass();
        obj.ShowVar();
        // obj.myVar = 10; // ERROR: 'MyClass.myVar' is inaccessible due to its protection level
    }
}

Protected

  • ุจูŠุณู…ุญ ุจุงู„ูˆุตูˆู„ ุฌูˆู‡ ู†ูุณ ุงู„ู€ class ูˆุฃูŠ class ุชุงู†ูŠ ุจูŠูˆุฑุซ ู…ู†ู‡ (derived class).
  • ุจูŠุธู‡ุฑ ุฌู†ุจู‡ ุนู„ุงู…ุฉ ู†ุฌู…ุฉ ููŠ ุงู„ู€ IntelliSense.
  • ุจู†ุณุชุฎุฏู…ู‡ ุจุดูƒู„ ุฃุณุงุณูŠ ููŠ ุงู„ู€ Inheritance ุนุดุงู† ู†ุณู…ุญ ู„ู„ูƒู„ุงุณุงุช ุงู„ู„ูŠ ุจุชูˆุฑุซ ู…ู†ู†ุง ุฅู†ู‡ุง ุชุดูˆู ุงู„ู€ members ุฏูŠ ู…ู† ุบูŠุฑ ู…ุง ู†ูƒุฑุฑ ุงู„ูƒูˆุฏ.
  • ู…ูŠู†ูุนุด ู†ุณุชุฎุฏู…ู‡ ููŠ struct ู„ุฃู† ุงู„ู€ struct ู…ุด ุจุชุฏุนู… ุงู„ูˆุฑุงุซุฉ.
  • ุจุงู„ู†ุณุจุฉ ู„ู„ูƒู„ุงุณ ุงู„ู„ูŠ ู‡ูˆ ู…ุชุนุฑู ููŠู‡ุŒ ู‡ูˆ ุจูŠูุนุชุจุฑ private.
public class MyClass
{
    protected int myVar = 5;
}
 
public class DerivedClass : MyClass
{
    public void ShowVar()
    {
        // Accessible because DerivedClass inherits from MyClass
        Console.WriteLine(myVar); 
    }
}

Internal

  • ุงู„ูˆุตูˆู„ ุจูŠูƒูˆู† ู…ุชุงุญ ู…ู† ุฃูŠ ู…ูƒุงู† ุฌูˆู‡ ู†ูุณ ุงู„ู€ Assembly (ูŠุนู†ูŠ ู†ูุณ ุงู„ู€ ProjectุŒ ุงู„ู„ูŠ ุจูŠุชุญูˆู„ ู„ู…ู„ู DLL ุฃูˆ EXE ูˆุงุญุฏ).
  • ุจูŠุธู‡ุฑ ุฌู†ุจู‡ ุนู„ุงู…ุฉ ู‚ู„ุจ ููŠ ุงู„ู€ IntelliSense.
  • ู„ูˆ ุนู…ู„ุช LibraryุŒ ุฃูŠ member ู…ุชุนุฑู ูƒู€ internal ุชู‚ุฏุฑ ุชุณุชุฎุฏู…ู‡ ุฌูˆุงู‡ุง ุจุฑุงุญุชูƒุŒ ู„ูƒู† ู„ูˆ ุงุณุชุฏุนูŠุช ุงู„ู€ Library ุฏูŠ ููŠ project ุชุงู†ูŠุŒ ู…ุด ู‡ุชู‚ุฏุฑ ุชูˆุตู„ ู„ู„ู€ member ุฏู‡.
// ---- In ProjectA.dll ----
internal class MyClass
{
    internal int myVar = 5;
}
 
// ---- Also in ProjectA.dll ----
class Program
{
    static void Main()
    {
        MyClass obj = new MyClass();
        // Accessible because it's in the same assembly
        Console.WriteLine(obj.myVar); 
    }
}
 
// ---- In ProjectB.exe (referencing ProjectA.dll) ----
// You cannot create an instance of 'MyClass' or access 'myVar' here.

Protected Internal

  • ุฏู‡ ู…ุฒูŠุฌ ุจูŠู† protected ูˆ internal. ุงู„ูˆุตูˆู„ ุจูŠูƒูˆู† ู…ุชุงุญ ู„ูˆ ุงู„ุดุฑุท ุฏู‡ ุฃูˆ ุฏู‡ ุงุชุญู‚ู‚:
    1. ุงู„ูƒูˆุฏ ุงู„ู„ูŠ ุจูŠุณุชุฏุนูŠู‡ ู…ูˆุฌูˆุฏ ููŠ ู†ูุณ ุงู„ู€ Assembly (ุฒูŠ internal).
    2. ุงู„ูƒูˆุฏ ุงู„ู„ูŠ ุจูŠุณุชุฏุนูŠู‡ ู…ูˆุฌูˆุฏ ููŠ derived class (ุฒูŠ protected)ุŒ ุญุชู‰ ู„ูˆ ูƒุงู† ุงู„ู€ derived class ุฏู‡ ููŠ Assembly ู…ุฎุชู„ู.
  • ุจุงู„ู†ุณุจุฉ ู„ู„ูƒู„ุงุณ ุงู„ู„ูŠ ู‡ูˆ ู…ุชุนุฑู ููŠู‡ุŒ ู‡ูˆ ุจูŠูุนุชุจุฑ private.
graph TD
    A[Access Scope] --> B{Protected OR Internal};
    B --> C[From Derived Class - Any Assembly];
    B --> D[From Same Assembly - Any Class];
public class MyClass
{
    protected internal int myVar = 5;
}
 
public class DerivedClass : MyClass
{
    public void ShowVar()
    {
        // Accessible because it's a derived class
        Console.WriteLine(myVar);
    }
}

Private Protected

  • ุฏู‡ ุจูŠุดุชุฑุท ุชุญู‚ู‚ ุงู„ุดุฑุทูŠู† ู…ุน ุจุนุถ:
    1. ู„ุงุฒู… ูŠูƒูˆู† ุงู„ูˆุตูˆู„ ู…ู† derived class.
    2. ูˆู„ุงุฒู… ูŠูƒูˆู† ุงู„ู€ derived class ุฏู‡ ู…ูˆุฌูˆุฏ ููŠ ู†ูุณ ุงู„ู€ Assembly.
  • ุจุงู„ู†ุณุจุฉ ู„ู„ูƒู„ุงุณ ุงู„ู„ูŠ ู‡ูˆ ู…ุชุนุฑู ููŠู‡ุŒ ู‡ูˆ ุจูŠูุนุชุจุฑ internal.
graph TD
    A[Access Scope] --> B{Private AND Protected};
    B --> C[From Derived Class];
    B --> D[Inside Same Assembly];
public class MyClass
{
    private protected int myVar = 5;
}
 
public class DerivedClass : MyClass
{
    public void ShowVar()
    {
        // Accessible because it's a derived class AND in the same assembly
        Console.WriteLine(myVar);
    }
}

Inside a Namespace

ุฌูˆู‡ ุงู„ู€ Namespace ุจู†ู‚ุฏุฑ ู†ูƒุชุจ:

  • Class
  • Struct
  • Interface
  • Enum

ุงู„ู€ Access Modifiers ุงู„ู…ุชุงุญุฉ ู‡ู†ุง ู‡ู…ุง ุงุชู†ูŠู† ุจุณ:

  1. ุงู„ู€ internal (ูˆุฏู‡ ุงู„ู€ Default)
  2. ุงู„ู€ public

ู…ู„ุญูˆุธุฉ ู…ู‡ู…ุฉ: ู‚ุจู„ ู…ุง ุชุญุงูˆู„ ุชุณุชุฎุฏู… ุฃูŠ class ุฃูˆ type ู…ู† Library ุชุงู†ูŠุฉุŒ ู„ุงุฒู… ุงู„ุฃูˆู„ ุชุถูŠู ุงู„ู€ Library ุฏูŠ ูƒู€ dependency ููŠ ุงู„ู…ุดุฑูˆุน ุจุชุงุนูƒุŒ ูˆุจุนุฏูŠู† ุชุนู…ู„ู‡ุง using ููŠ ุฃูˆู„ ุงู„ู…ู„ู.

ู„ูˆ ู…ุนุฑู‘ูุชุด Access Modifier ู„ุฃูŠ type ุนู„ู‰ ู…ุณุชูˆู‰ ุงู„ู€ NamespaceุŒ ุงู„ู€ C# compiler ู‡ูŠุนุชุจุฑู‡ internal ุชู„ู‚ุงุฆูŠู‹ุง. ุฏู‡ ู…ุนู†ุงู‡ ุฅู†ู‡ ู‡ูŠูƒูˆู† ู…ุชุงุญ ู„ู„ุงุณุชุฎุฏุงู… ุฌูˆู‡ ู†ูุณ ุงู„ู€ Project ุจุณ. ู„ูˆ ู…ุญุชุงุฌ ุชูˆุตู„ู‡ ู…ู† project ุชุงู†ูŠุŒ ู„ุงุฒู… ุชุนุฑู‘ูู‡ ูƒู€ public.

Inside a Class or Struct

ุฌูˆู‡ ุงู„ู€ Class ุฃูˆ ุงู„ู€ Struct ุจู†ู‚ุฏุฑ ู†ูƒุชุจ:

  • ุงู„ู€ Attributes (Fields): ุงู„ู„ูŠ ู‡ูŠ ุงู„ู€ member variables.
  • ุงู„ู€ Properties: ุฒูŠ ุงู„ู€ Full Property ูˆุงู„ู€ Automatic Property.
  • ุงู„ู€ Functions: ุฒูŠ ุงู„ู€ Constructor ูˆุงู„ู€ Methods.
  • ุงู„ู€ Events.

Modifiers in a Struct

ู…ุชุงุญ 3 ุฃู†ูˆุงุน ุจุณ:

  • private (Default)
  • internal
  • public

Modifiers in a Class

ู…ุชุงุญ ูƒู„ ุงู„ุฃู†ูˆุงุน ุงู„ุณุชุฉ:

  • private (ูˆุฏู‡ ุงู„ู€ Default)
  • private protected
  • protected
  • internal
  • protected internal
  • public

ุงู„ู€ Default ู„ุฃูŠ member ุฌูˆู‡ class ุฃูˆ struct ู‡ูˆ private.

Inside an Interface

ุฌูˆู‡ ุงู„ู€ Interface ุจู†ู‚ุฏุฑ ู†ูƒุชุจ:

  1. Signature for Property: ุจู†ุญุฏุฏ ุดูƒู„ ุงู„ู€ property ุจุณ ู…ู† ุบูŠุฑ implementation.
    // In an interface, this is a property signature
    public int Salary { get; set; }
  2. Signature for Method: ุจู†ูƒุชุจ ุงู„ู€ signature ุจุชุงุน ุงู„ู€ method ุจุณ ู…ู† ุบูŠุฑ body.
    public void MyFun();
  3. Default Implemented Method: ุฏูŠ feature ุฌุฏูŠุฏุฉ ู…ู† ุฃูˆู„ C# 8.0ุŒ ุจุชุณู…ุญู„ูƒ ุชูƒุชุจ method ูƒุงู…ู„ุฉ ุฌูˆู‡ ุงู„ู€ interface.
    public void Print()
    {
        Console.WriteLine("Hello Default Implemented");
    }

ุงู„ู€ Default ู„ุฃูŠ member ุฌูˆู‡ interface ู‡ูˆ publicุŒ ูˆุฏู‡ ู…ู†ุทู‚ูŠ ู„ุฃู† ุงู„ู‡ุฏู ู…ู† ุงู„ู€ interface ู‡ูˆ ุฅู† ุงู„ูƒู„ุงุณุงุช ุงู„ู„ูŠ ุจุชุนู…ู„ู‡ุง implement ุชู‚ุฏุฑ ุชูˆุตู„ ู„ู„ู€ signatures ุฏูŠ.

Inside an Enum

ุงู„ู€ Enum ุจู†ูƒุชุจ ุฌูˆุงู‡ Labels ุจุณ. ุงู„ู€ Access Modifiers ุจุชุชุญุท ุนู„ู‰ ุงู„ู€ Enum ู†ูุณู‡ุŒ ู…ุด ุนู„ู‰ ุงู„ู€ labels ุงู„ู„ูŠ ุฌูˆุงู‡.