internal एक्सेस मॉडिफायर मेंबर को उसी असेंबली (असेंबली = .exe या .dll) के भीतर किसी भी क्लास/मेथड से एक्सेसिबल बनाता है, लेकिन असेंबली के बाहर से नहीं।
उदाहरण
using System;
namespace RectangleApplication
{
class Rectangle
{
// इंटरनल मेंबर वेरिएबल्स
internal double length;
internal double width;
double GetArea() // डिफ़ॉल्ट private
{
return length * width;
}
public void Display()
{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}
class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.length = 4.5; // समान असेंबली में - अनुमत
r.width = 3.5; // समान असेंबली में - अनुमत
r.Display();
Console.ReadLine();
}
}
}
आउटपुट
Length: 4.5 Width: 3.5 Area: 15.75
मुख्य बिंदु
internalC# में क्लास/स्ट्रक्चर के लिए **डिफ़ॉल्ट** एक्सेस लेवल है (यदि कोई मॉडिफायर न दिया जाए)।- असेंबली सीमा पर रुकता है - अन्य असेंबली (DLL/EXE) एक्सेस नहीं कर सकतीं।
- लाइब्रेरी कोड में आंतरिक कार्यान्वयन छुपाने के लिए उपयोगी।
protected internal= डेराइव्ड क्लास या समान असेंबली।private protected= डेराइव्ड क्लास और समान असेंबली (C# 7.2+)।
व्यावहारिक उपयोग
// MyLibrary.dll में
internal class InternalHelper { } // बाहरी असेंबली से छुपा
public class PublicApi { } // बाहरी उपयोग के लिए
// ConsumerApp.exe में (MyLibrary रेफरेंस)
var api = new PublicApi(); // ✅ काम करता है
// var helper = new InternalHelper(); // ❌ कंपाइल एरर