internal (C# 參考)

更新:2007 年 11 月

internal 關鍵字是型別和型別成員的存取修飾詞。內部型別或內部成員只能在相同組件中的檔案內存取,如本範例所示:

public class BaseClass 
{
    // Only accessible within the same assembly
    internal static int x = 0;
}

如需 internal 與其他存取修飾詞的比較,請參閱存取範圍層級 (C# 參考)存取修飾詞 (C# 程式設計手冊)

如需組件的詳細資訊,請參閱組件和全域組件快取 (C# 程式設計手冊)

內部存取的常見用法是以元件為基礎的開發上,因為它使得元件群組以私用的方式相互合作,無須公開其他部分的應用程式碼。例如,建立圖形使用者介面的架構可以提供 Control 和 Form 類別,這兩個類別會以內部存取的方式使用成員相互合作。因為這些成員是內部的,他們不公開給使用架構的程式碼。

在定義型別或成員的組件外部,以內部存取方式來參考此型別或成員是錯誤的做法。

注意事項:

internalvirtual 方法即使無法以 C# 覆寫,也能夠使用某些程式語言來覆寫 (例如使用 Ilasm.exe 的文字性 Microsoft Intermediate Language (MSIL))。

範例

這個範例包含兩個檔案,Assembly1.cs 和 Assembly2.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# 語言規格中的下列章節:

  • 3.5.1 宣告存取範圍

  • 3.5.4 存取範圍條件約束

  • 10.3.5 存取修飾詞

  • 10.3.8.2 宣告存取範圍

請參閱

概念

C# 程式設計手冊

參考

C# 關鍵字

存取修飾詞 (C# 參考)

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

修飾詞 (C# 參考)

public (C# 參考)

private (C# 參考)

protected (C# 參考)

其他資源

C# 參考