ุงูู 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 Modifier | Inside Class | In Same Namespace | Inherited Class | Another Class |
|---|---|---|---|---|
| Public | Yes | Yes | Yes | Yes |
| Private | Yes | No | No | No |
| Protected | Yes | No | Yes | No |
| Internal | Yes | Yes | No | No |
| Protected Internal | Yes | Yes | Yes | No |
| Private Protected | Yes | No | Yes (in same Library) | No |

Valid Modifiers per Scope
ุงูุฌุฏูู ุฏู ุจููุถุญ ุงูู Access Modifiers ุงูู
ุชุงุญุฉ ููู ุฌุฒุก ู
ู ุงูููุฏ ูุงูู default ุจุชุงุนูุง.
| Scope | Contains | Valid Access Modifiers |
|---|---|---|
| Namespace | Class, Struct, Interface, Enum | internal (Default), public |
| Class | Attributes, Properties, Function, Event | All Access Modifiers (Default โ private) |
| Struct | Attributes, Properties, Function, Event | private (Default), internal, public |
| Interface | Property Signature, Method Signature, Default Implemented Method | public (Default) |
| Enum | Labels | N/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. ุงููุตูู ุจูููู ู ุชุงุญ ูู ุงูุดุฑุท ุฏู ุฃู ุฏู ุงุชุญูู:- ุงูููุฏ ุงููู ุจูุณุชุฏุนูู ู
ูุฌูุฏ ูู ููุณ ุงูู
Assembly(ุฒูinternal). - ุงูููุฏ ุงููู ุจูุณุชุฏุนูู ู
ูุฌูุฏ ูู
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
- ุฏู ุจูุดุชุฑุท ุชุญูู ุงูุดุฑุทูู ู
ุน ุจุนุถ:
- ูุงุฒู
ูููู ุงููุตูู ู
ู
derived class. - ููุงุฒู
ูููู ุงูู
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 ุจููุฏุฑ ููุชุจ:
ClassStructInterfaceEnum
ุงูู Access Modifiers ุงูู
ุชุงุญุฉ ููุง ูู
ุง ุงุชููู ุจุณ:
- ุงูู
internal(ูุฏู ุงููDefault) - ุงูู
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)internalpublic
Modifiers in a Class
ู ุชุงุญ ูู ุงูุฃููุงุน ุงูุณุชุฉ:
private(ูุฏู ุงููDefault)private protectedprotectedinternalprotected internalpublic
ุงูู
Defaultูุฃูmemberุฌููclassุฃูstructููprivate.
Inside an Interface
ุฌูู ุงูู Interface ุจููุฏุฑ ููุชุจ:
- Signature for Property: ุจูุญุฏุฏ ุดูู ุงูู
propertyุจุณ ู ู ุบูุฑimplementation.// In an interface, this is a property signature public int Salary { get; set; } - Signature for Method: ุจููุชุจ ุงูู
signatureุจุชุงุน ุงููmethodุจุณ ู ู ุบูุฑbody.public void MyFun(); - 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 ุงููู ุฌูุงู.