存取範圍定義域 (C# 參考)
成員的存取範圍定義域會指定可參考成員的程式區段。 如果成員在其他型別內成巢狀,其存取範圍定義域是由成員的存取範圍層級和立即包含型別的存取範圍定義域來決定。
最上層型別的存取範圍定義域至少包含其宣告之專案的程式內容。 也就是網域包含這個專案所有的原始程式檔。 巢狀型別的存取範圍定義域至少包含其宣告之型別的程式內容。 也就是說,定義域是型別主體,其中包括所有的巢狀型別。 巢狀型別的存取範圍定義域不會超過包含型別的存取範圍定義域。 這些概念會在下列範例裡示範。
範例
這個範例包含最上層型別,T1,和兩個巢狀類別,M1 和 M2。 這些類別包含具有不同宣告存取範圍的欄位。 Main 方法裡,每一個陳述式後會有註解指出每一個成員的存取範圍定義域。 請注意,嘗試參考無法存取之成員的陳述式都會標記為註解。 如果您要查看由參考無法存取之成員所造成的編譯器錯誤,請一次移除一個註解。
namespace AccessibilityDomainNamespace
{
public class T1
{
public static int publicInt;
internal static int internalInt;
private static int privateInt = 0;
static T1()
{
// T1 can access public or internal members
// in a public or private (or internal) nested class
M1.publicInt = 1;
M1.internalInt = 2;
M2.publicInt = 3;
M2.internalInt = 4;
// Cannot access the private member privateInt
// in either class:
// M1.privateInt = 2; //CS0122
}
public class M1
{
public static int publicInt;
internal static int internalInt;
private static int privateInt = 0;
}
private class M2
{
public static int publicInt = 0;
internal static int internalInt = 0;
private static int privateInt = 0;
}
}
class MainClass
{
static void Main()
{
// Access is unlimited:
T1.publicInt = 1;
// Accessible only in current assembly:
T1.internalInt = 2;
// Error CS0122: inaccessible outside T1:
// T1.privateInt = 3;
// Access is unlimited:
T1.M1.publicInt = 1;
// Accessible only in current assembly:
T1.M1.internalInt = 2;
// Error CS0122: inaccessible outside M1:
// T1.M1.privateInt = 3;
// Error CS0122: inaccessible outside T1:
// T1.M2.publicInt = 1;
// Error CS0122: inaccessible outside T1:
// T1.M2.internalInt = 2;
// Error CS0122: inaccessible outside M2:
// T1.M2.privateInt = 3;
// Keep the console open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
}
C# 語言規格
如需詳細資訊,請參閱 C# 語言規格。語言規格是 C# 語法和用法的限定來源。