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 中的組件。
內部存取常用於以元件為基礎的開發作業,因為它可讓一組元件私下相互合作,而不會公開給應用程式的其餘程式碼。 例如,建立圖形化使用者介面的架構可提供 Control
和 Form
類別,這兩個類別會以內部存取方式透過成員來相互合作。 由於這些是內部成員,因此不會公開給使用此架構的程式碼。
在定義類型或成員的組件外部,以內部存取方式來參考此類型或成員是錯誤的做法。
範例 1
此範例包含兩個檔案:Assembly1.cs
和 Assembly1_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# 語法及用法的限定來源。