کلمه کلیدی internal یک اصلاحگر (Modifier) برای نوع و اعضای نوع ها است. نوع ها و اعضای internal فقط از طریق فایل درون اسمبلی های یکسان قابل دستیابی اند.
مثال:
public class BaseClass { // فقط از طریق اسمبلی یکسان قابل دستیابی است internal static int x = 0; }
نوع ها و اعضایی که اصلاحگر protected internal داشته باشند، می توانند از طریق اسمبلی فعلی یا از طریق نوع های مشتق شده از کلاسی که حاوی این اصلاحگر می باشند، دستیابی شوند.
- یک استفاده عمومی از این اصلاحگر دستیابی، در توسعه نرم افزاری مؤلفه گرا (Component-Base) می باشد. زیرا توانایی همکاری گروهی از مؤلفه ها را بطور خصوصی (private) و بدون دیده شدن از طریق بقیه کد برنامه را می دهد. برای مثال یک قاب کاری (Framework) برای ساخت رابط کاربری گرافیکی می تواند کلاس های Control و Form را که بوسیله اعضای internal با هم همکاری می کنند را ارائه کند. تا زمانی که این اعضا بصورت internal باشند، در معرض دید کدی که از قاب کاگری استفاده می کند نیستند.
- ارجاع دادن نوع یا عضوی با اصلاحگر دستیابی internal به بیرون اسمبلی ای که در آن تعریف شده، یک خطا محسوب می شود.
نکته: یک متد internal virtual می تواند در بعضی زبان ها از جمله MSIL متنی، با استفاده از ILasm.exe بازنویسی (Override) شود، حتی با وجود اینکه نمی تواند بوسیله #C بازنویسی شود.
مثال: این مثال شامل دو فایل Assembly1.cs و Assembly1_a.cs می باشد. فایل اول حاوی یک کلاس پایه internal به نام BaseClass است. در فایل دوم تلاشی که برای نمونه سازی BaseClass انجام شده، منجر به بروز خطا خواهد شد.
// Assembly1.cs // بااین پارامتر کمپایل شود: /target:library
internal class BaseClass { public static int intM = 0; }
// Assembly1_a.cs // بااین پارامتر کمپایل شود: /reference:Assembly1.dll class TestAccess { static void Main() { BaseClass myBase = new BaseClass(); // CS0122 } }
مثال: در این مثال از همان فایل های مثال قبل استفاده کنید و سطح دسترسی BaseClass را به public تغییر دهید. همچنین سطح دسترسی عضو intM را به internal تغییر دهید. در این مثال شما می توانید از کلاس نمونه گیری کنید اما نمی توانید به عضو internal دسترسی داشته باشید.