internal (C# 參考)
internal 關鍵字是型別和型別成員的存取修飾詞。 內部型別或內部成員只能在相同組件中的檔案內存取,如本範例所示:
public class BaseClass
{
// Only accessible within the same assembly
internal static int x = 0;
}
具有存取修飾詞 protected internal 的型別或成員可以從目前組件中存取,或是透過衍生自包含類別的型別存取。
如需 internal 與其他存取修飾詞的比較,請參閱存取範圍層級 (C# 參考) 和存取修飾詞 (C# 程式設計手冊)。
如需組件的詳細資訊,請參閱組件和全域組件快取 (C# 和 Visual Basic)。
內部存取的常見用法是以元件為基礎的開發上,因為它使得元件群組以私用的方式相互合作,無須公開其他部分的應用程式碼。 例如,建立圖形使用者介面的架構可以提供 Control 和 Form 類別,這兩個類別會以內部存取的方式使用成員相互合作。 因為這些成員是內部的,他們不公開給使用架構的程式碼。
在定義型別或成員的組件外部,以內部存取方式來參考此型別或成員是錯誤的做法。
注意事項 |
---|
internal virtual 方法即使無法以 C# 覆寫,也能夠使用某些程式語言來覆寫 (例如使用 Ilasm.exe 的文字性 Microsoft Intermediate Language (MSIL))。 |
範例
這個範例包含兩個檔案,Assembly1.cs 和 Assembly1_a.cs。 第一個檔案包含內部基底類別,BaseClass。 如果在第二個檔案中嘗試產生 (Instantiate) BaseClass,將會產生錯誤。
// Assembly1.cs
// Compile with: /target:library
internal class BaseClass
{
public static int intM = 0;
}
// Assembly1_a.cs
// Compile with: /reference:Assembly1.dll
class TestAccess
{
static void Main()
{
BaseClass myBase = new BaseClass(); // CS0122
}
}
在這個範例中,請使用在範例 1 中所用的相同檔案,並將 BaseClass 的存取範圍層級變更為 public。 同時將成員 IntM 的存取範圍層級變更為 internal。 如此一來您可以將類別具現化,但無法存取內部成員。
// Assembly2.cs
// Compile with: /target:library
public class BaseClass
{
internal static int intM = 0;
}
// Assembly2_a.cs
// Compile with: /reference:Assembly1.dll
public class TestAccess
{
static void Main()
{
BaseClass myBase = new BaseClass(); // Ok.
BaseClass.intM = 444; // CS0117
}
}
C# 語言規格
如需詳細資訊,請參閱 C# 語言規格。 語言規格是 C# 語法和用法的決定性來源。