ุงูู Access Modifiersุ ุฃู ุฒู ู
ุง ุจูุชุณู
ูุง ุจุฑุถู Access Specifiersุ ูู
ุง ุนุจุงุฑุฉ ุนู C# Keywords ุจุชุณุงุนุฏูุง ูุญุฏุฏ ูุทุงู ุงููุตูู ุฃู ุงูุฑุคูุฉ (accessibility scope). ุจุจุณุงุทุฉุ ูู
ุง ุงููู ุจูุญุฏุฏูุง ู
ูู ููุฏุฑ ูุณุชุฎุฏู
ุฃู ูุดูู type ู
ุนูู (ุฒู class ุฃู struct) ุฃู ุนุถู ู
ุนูู (ุฒู method ุฃู variable) ูู
ูู ูุฃ.
ูู ูุบุฉ C#ุ ุฅุญูุง ุจููุชุจ ุงูููุฏ ุจุชุงุนูุง ุฌูู Namespaceุ ูุฌูู ุงูู namespace ุฏู ุจูุนุฑู types ู
ุฎุชููุฉ ุฒู:
ูุฌูู ุงูู Types ุฏูุ ุจููุชุจ ุฃุนุถุงุก (members) ุฒู ุงูู functions ูุงูู
ุชุบูุฑุงุช ูุบูุฑูุง. ุงูู Access Modifiers ูู ุงููู ุจุชุฌุงูุจ ุนูู ุณุคุงู: โุงูุญุงุฌุงุช ุฏู ูุชุจูู ู
ุชุงุญุฉ ูููุตูู ูุญุฏ ููู ุจุงูุธุจุทุ ูู ุฌูู ุงูู Library (ุงูู
ุดุฑูุน) ุจุณุ ููุง ูู ุญุฏ ุงุณุชุฎุฏู
ุงูู Library ุฏู ูู ู
ุดุฑูุน ุชุงูู ูููุฏุฑ ููุตููุง ุจุฑุถูุโ.
Types of Access Modifiers
ูุบุฉ C# ุจุชุฏุนู
6 ุฃููุงุน ู
ู ุงูู Access Modifiers:
PublicPrivateProtectedInternalProtected InternalPrivate Protectedfilenew access modifier
ุงูู Members ุงููู ู
ุชุนุฑูุฉ ุฌูู type ู
ุนูู ุจุชููู ุฏุงูู
ูุง ู
ุชุงุญุฉ ูููุตูู ู
ู ุฌูู ููุณ ุงูู type ุฏูุ ุจุบุถ ุงููุธุฑ ุนู ุงูู Access Modifier ุจุชุงุนูุง. ุงููููุฏ ุจุชุธูุฑ ุจุณ ูู
ุง ุจูุญุงูู ููุตู ููุนุถู ุฏู ู
ู ุจุฑู ุงูู type.
Detailed Breakdown of Each Access Modifier
ุฎูููุง ููุตุต ูู ูุงุญุฏ ูููู ุจุงูุชูุตูู.
1. Public
- ุงูุดุฑุญ: ููุฏุฑ ููุตูู ู
ู ุฃู ู
ูุงู ูู ุงูุจุฑูุงู
ุฌ ุจุฏูู ุฃู ูููุฏุ ุณูุงุก ุฌูู ููุณ ุงูู
Assembly(ุงูู ุดุฑูุน) ุฃู ู ู ุฃูAssemblyุชุงูู. - ู ุซุงู:
public class MyClass
{
public int myVar = 5;
}
class Program
{
static void Main()
{
MyClass obj = new MyClass();
// Accessible from anywhere
Console.WriteLine(obj.myVar);
}
}2. Private
- ุงูุดุฑุญ: ููุฏุฑ ููุตูู ููุท ุฌูุง ููุณ ุงูููุงุณ ุฃู ุงูู Struct ุงููู ูู ู ุชุนุฑู ุฌูุงู. ุฏู ุฃูุชุฑ ููุน ู ููุฏ ูููู .
- ุงูุนูุงู
ุฉ ูู ุงูู IDE: ุงูู
Memberุจูุจูู ุนููู ุดูู ููู. - ู ุซุงู:
public class MyClass
{
private int myVar = 5;
public void ShowVar()
{
// Accessible only inside this class
Console.WriteLine(myVar);
}
}
class Program
{
static void Main()
{
MyClass obj = new MyClass();
obj.ShowVar(); // This works
// obj.myVar = 10; // This would cause a compile-time ERROR
}
}3. Protected
- ุงูุดุฑุญ: ููุฏุฑ ููุตูู ุฌูุง ููุณ ุงูููุงุณุ ููู ุฃู
Inherited Classes(ููุงุณุงุช ุจุชูุฑุซ ู ูู)ุ ุญุชู ูู ุงูููุงุณ ุงููู ุจููุฑุซ ุฏู ู ูุฌูุฏ ููAssemblyู ุฎุชูู. - ุงูุนูุงู ุฉ ูู ุงูู IDE: ุจูุจูู ุนููู ุดูู ูุฌู ุฉ.
- ุงูุงุณุชุฎุฏุงู
: ุจูุณุชุฎุฏู
ู ุจุดูู ุฃุณุงุณู ู
ุน ุงูู Inheritance ุนุดุงู ูุณู
ุญ ููููุงุณุงุช ุงูุฃุจูุงุก ุฅููุง ุชูุตู ูุฃุนุถุงุก ู
ุนููุฉ ูู ุงูููุงุณ ุงูุฃุจ ู
ู ุบูุฑ ู
ุง ูุฎูููุง
publicูููู. - ู
ูุงุญุธุงุช:
- ู
ูููุนุด ูุณุชุฎุฏู
ู ูู
Structูุฃูู ู ุด ุจูุฏุนู ุงููุฑุงุซุฉ. - ุจุงููุณุจุฉ ููููุงุณ ุงููู ูู ูููุ ูู ุจูุชุนุงู
ู ู
ุนุงู
ูุฉ ุงูู
private.
- ู
ูููุนุด ูุณุชุฎุฏู
ู ูู
- ู ุซุงู:
public class MyClass
{
protected int myVar = 5;
}
// DerivedClass can access myVar because it inherits from MyClass
public class DerivedClass : MyClass
{
public void ShowVar()
{
Console.WriteLine(myVar);
}
}
public class AnotherClass
{
public void TryAccess()
{
MyClass obj = new MyClass();
// obj.myVar = 10; // ERROR: Not accessible from a non-derived class
}
}4. Internal
- ุงูุดุฑุญ: ููุฏุฑ ููุตูู ุฌูุง ููุณ ุงูู project/assembly. ุงูู
Assemblyูู ุงูู ูุชุฌ ุงูููุงุฆู ูุนู ููุฉ ุงููbuild(ุฒู ู ููDLLุฃูEXE). ุฃู ููุงุณ ุฌูู ููุณ ุงูู ุดุฑูุน ููุฏุฑ ูุดูููุ ููู ูู ุญุงููุช ุชุณุชุฎุฏู ู ู ู ู ุดุฑูุน ุชุงููุ ู ุด ูุชูุฏุฑ. - ุงูุนูุงู ุฉ ูู ุงูู IDE: ุจูุจูู ุนููู ุนูุงู ุฉ ููุจ.
- ู ุซุงู:
// This class is in ProjectA.dll
internal class MyClass
{
internal int myVar = 5;
}
// This class is also in ProjectA.dll
class ProgramInSameAssembly
{
static void Main()
{
MyClass obj = new MyClass();
// Works because it's in the same assembly
Console.WriteLine(obj.myVar);
}
}
// If you try to access MyClass from ProjectB.exe, it will fail.5. Protected Internal
- ุงูุดุฑุญ: ุฏู ู
ุฒูุฌ ุจูุฌู
ุน ุจูู
ProtectedูInternal. ุงููุตูู ุจูููู ู ุณู ูุญ ุจู ูู ุญุงูุชูู (OR):- ู ู ุฃู ููุงุณ ุฏุงุฎู ููุณ ุงูู Assembly.
- ุฃู ู
ู ุฃู
Inherited Classุ ุญุชู ูู ูุงู ููassemblyู ุฎุชูู.
- ุจุงููุณุจุฉ ููููุงุณ ุงููู ูู ููู: ุจูุชุนุงู
ู ู
ุนุงู
ูุฉ ุงูู
private. - ู ุซุงู:
public class MyClass
{
protected internal int myVar = 5;
}
// Derived class in another assembly
public class DerivedClass : MyClass
{
public void ShowVar()
{
// Accessible: it's a derived class
Console.WriteLine(myVar);
}
}
// Non-derived class in the same assembly
public class AnotherClassInSameAssembly
{
public void AccessVar()
{
MyClass obj = new MyClass();
// Accessible: it's in the same assembly
obj.myVar = 10;
}
}6. Private Protected
- ุงูุดุฑุญ: ุฏู ู
ุฒูุฌ ู
ููุฏ ุฃูุชุฑุ ุจูุฌู
ุน ุจูู
PrivateูProtected. ุงููุตูู ู ุณู ูุญ ุจู ุจุณ ูู ุงูุดุฑุทูู ุฏูู ุงุชุญูููุง ู ุน ุจุนุถ (AND):- ู
ู
Inherited Class. - ู ูุงุฒู ุงูููุงุณ ุฏู ูููู ูู ููุณ ุงูู Assembly.
- ู
ู
- ุจุงููุณุจุฉ ููููุงุณ ุงููู ูู ููู: ุจูุชุนุงู
ู ู
ุนุงู
ูุฉ ุงูู
internal. - ู ุซุงู:
// In ProjectA.dll
public class MyClass
{
private protected int myVar = 5;
}
// In ProjectA.dll
public class DerivedClass : MyClass
{
public void ShowVar()
{
// Accessible: derived class AND in the same assembly
Console.WriteLine(myVar);
}
}
// In ProjectB.exe
public class DerivedInAnotherAssembly : MyClass
{
public void TryShowVar()
{
// Console.WriteLine(myVar); // ERROR: Not in the same assembly
}
}7. New in Modern .NET: The file Modifier
ุงุจุชุฏุงุกู ู
ู C# 11 (ูุงููู ู
ูู
ู ู
ุนุงูุง ูู .NET 8, 9, ู 10)ุ ุธูุฑ Access Modifier ุฌุฏูุฏ ูู
ูู
ุฌุฏูุง ุงุณู
ู file.
- ุงูู
filemodifier: ุจูุฎูู ุงูููุงุณ ู ุชุดุงู ููุท ุฌูู ู ูู ุงูููุฏ (ุงูู.csfile) ุงููู ูู ู ูุชูุจ ููู. - ุฏู ู ููุฏ ุฌุฏูุง ูู ุญุงูุงุช ุงูู Source Generators ุนุดุงู ูู ูุน ุชุนุงุฑุถ ุงูุฃุณู ุงุก ุจูู ุงูู ููุงุช ุงูู ุฎุชููุฉ.
// File-scoped type (C# 11+)
file class HiddenHelpers
{
// This class is ONLY visible within this specific .cs file
}ู ุด ู ูู .
Summary of Access Levels
ุงูุฌุฏูู ุฏู ุจููุฎุต ุฅู
ูุงููุฉ ุงููุตูู ููู modifier ู
ู ุฃู
ุงูู ู
ุฎุชููุฉ:
| Access Modifier | Inside Class | In Same Namespace | Inherited Classes | 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 |
Access Modifiers in Different Scopes
ุงูููุงุนุฏ ุจุชุฎุชูู ุนูู ุญุณุจ ุงูู ูุงู ุงููู ุจุชูุชุจ ููู ุงูููุฏ.
Inside a Namespace
ุฌูู ุงูู Namespaceุ ุงูู types ุงููู ุจูุนุฑููุง (Class, Struct, Interface, Enum) ู
ุนูุฏูุงุด ุบูุฑ ุงุชููู Access Modifiers ู
ุชุงุญูู:
- ุงูู Internal (Default): ูู ู
ูุชุจุชุด ุฃู ุญุงุฌุฉุ ุงูู
typeุจุชุงุนู ูููููinternal. ุฏู ู ุนูุงู ุฅูู ููููู ู ุชุดุงู ุฌูู ุงููLibrary(ุงูู ุดุฑูุน) ุงููู ูู ููู ุจุณ. ูู ุญุงููุช ุชุณุชุฎุฏู ู ู ู ู ุดุฑูุน ุชุงููุ ู ุด ูุชุดููู ูููุทูุนููerror. - ุงูู Public: ูู ุนุงูุฒ ุงูู
typeุจุชุงุนู ูููู ู ุชุงุญ ููุงุณุชุฎุฏุงู ูู ุฃู ู ุดุฑูุน ุชุงููุ ูุงุฒู ุชุนู ููpublic.
ูุจู ู ุง ุชุญุงูู ุชุณุชุฎุฏู ุฃู class ุฃู ุญุงุฌุฉ ู ูุฌูุฏุฉ ูู
Libraryุชุงููุฉุ ูุงุฒู ุงูุฃูู ุชุถููreferenceูููLibraryุฏู ูู ุงูู ุดุฑูุน ุจุชุงุนู (Right click at project โ Build dependencies โ Project dependencies โ Add project reference)ุ ูุจุนุฏูู ุชุนู ูusingูููnamespaceุจุชุงุนูุง ููู ูู ู ูู ุงูููุฏ.
Inside a Class or a Struct
ุฌูู ุงูู Class ุฃู ุงูู Structุ ุจููุฏุฑ ููุชุจ members ุฒู ุงูู Fields, Properties, Methods, ู Events.
- ุฌูู ุงูู
Class: ู ุชุงุญ ูู ุงูุณุชุฉAccess Modifiers. - ุฌูู ุงูู
Struct: ู ุชุงุญ ุชูุงุชุฉ ุจุณ:PrivateุInternalุ ูPublic.
ุงูุงูุชุฑุงุถู (
Default) ูู ุงูุงุชููู ููPrivate.
Inside an Interface
ุฌูู ุงูู Interfaceุ ุจููุฏุฑ ููุชุจ:
- ุงูู Signature for a Property: ุจูุญุฏุฏ ุดูู ุงูู
propertyุจุณุ ุฒู:public int Salary {get; set;}. - ุงูู Signature for a Method: ุจููุชุจ ุชูููุน ุงูู
methodู ู ุบูุฑbodyุ ุฒู:public void MyFun();. - ุงูู Default Implemented Method:
functionูุงู ูุฉ ุจุงููbodyุจุชุงุนูุง (ู ูุฒุฉ ุงุชุถุงูุช ูู C# 8.0).
ุงูุงูุชุฑุงุถู (
Default) ูู ุงููInterfaceููPublic. ูุงูุณุจุจ ูู ุฅู ุงููInterfaceุนุจุงุฑุฉ ุนูcontractุ ููุงุฒู ูู ุญุงุฌุฉ ููู ุชููู ู ุชุงุญุฉ ููููุงุณ ุงููู ููุนู ููimplement.
Inside an Enum
ุฌูู ุงูู Enumุ ุจููุชุจ Labels (ุฃุณู
ุงุก ุงูููู
)ุ ูุฏู ุจุชููู public ุจุดูู ุงูุชุฑุงุถู.
Summary Table for Scopes & Defaults
| Scope | Whatโs Inside? | Valid Access Modifiers | Default |
|---|---|---|---|
| Namespace | Class, Struct, Interface, Enum | Internal, Public | Internal |
| Class | Fields, Properties, Methods, Events | All 6 Modifiers | Private |
| Struct | Fields, Properties, Methods, Events | Private, Internal, Public | Private |
| Interface | Property/Method Signatures, Default Methods | - | Public |
Practical Example Breakdown
ุงูู
ุซุงู ุฏู ุจููุถุญ ุงููุฑู ุงูุฏููู ุจูู private protected ู protected internal ูู ุณููุงุฑูููุงุช ู
ุฎุชููุฉ:
// Library: Common
public class TypeA
{
private protected int X;
protected int Y;
protected internal int Z;
}
// === Scenario 1: Derived Class in the SAME Library ===
// Class: TypeB
internal class TypeB : TypeA
{
public TypeB()
{
// X is accessible: derived AND in same assembly.
this.X = 1;
// Y is accessible: derived.
this.Y = 2;
// Z is accessible: in same assembly.
this.Z = 3;
}
}
// === Scenario 2: Derived Class in ANOTHER Library ===
// Class: TypeC (in a different project/assembly)
internal class TypeC : TypeA
{
public TypeC()
{
// X is NOT accessible: it's a derived class, BUT NOT in the same assembly.
// this.X = 1; // ERROR
// Y is accessible: it's a derived class.
this.Y = 2;
// Z is accessible: it's a derived class.
this.Z = 3;
}
}