internal (C# 參考)

internal 關鍵字是類型和類型成員的存取修飾詞

此頁面涵蓋 internal 存取。 internal 關鍵字也是屬於 protected internal 存取修飾詞。

內部類型或成員只能在相同 元件中的檔案記憶體取,如下列範例所示:

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

如需 internal 和其他存取修飾詞的比較,請參閱存取範圍層級存取修飾詞

assembly是編譯一或多個原始程式檔所產生的可執行檔或動態連結庫 (DLL)。

如需組件的詳細資訊,請參閱 .NET 中的組件

內部存取常用於以元件為基礎的開發作業,因為它可讓一組元件私下相互合作,而不會公開給應用程式的其餘程式碼。 例如,建立圖形化使用者介面的架構可提供 ControlForm 類別,這兩個類別會以內部存取方式透過成員來相互合作。 由於這些是內部成員,因此不會公開給使用此架構的程式碼。

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

範例 1

此範例包含兩個檔案:Assembly1.csAssembly1_a.cs。 第一個檔案包含內部基底類別 BaseClass。 在第二個檔案中,嘗試具現化 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()
   {  
      var myBase = new BaseClass();   // CS0122  
   }  
}  

範例 2

在此範例中,請使用您在範例 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:Assembly2.dll  
public class TestAccess
{  
   static void Main()
   {  
      var myBase = new BaseClass();   // Ok.  
      BaseClass.intM = 444;    // CS0117  
   }  
}  

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格已宣告存取範圍。 語言規格是 C# 語法及用法的限定來源。

另請參閱