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# 語法和用法的決定性來源。

請參閱

參考

C# 關鍵字

存取修飾詞 (C# 參考)

存取範圍層級 (C# 參考)

修飾詞 (C# 參考)

public (C# 參考)

private (C# 參考)

protected (C# 參考)

概念

C# 程式設計手冊

其他資源

C# 參考