protected internal (C# 參考)
protected internal
關鍵字組合是成員存取修飾詞。 protected internal 成員可以從目前的組件或衍生自包含類別的類型存取。 如需 protected internal
和其他存取修飾詞的比較,請參閱存取範圍層級。
範例
基底類別的 protected internal 成員可以從其包含組件內的任何類型存取。 它也可以在位於另一個組件的衍生類別內存取,但只能是在透過衍生類別類型的變數進行存取之時。 例如,請考慮下列程式碼區段:
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal int myValue = 0;
}
class TestAccess
{
void Access()
{
var baseObject = new BaseClass();
baseObject.myValue = 5;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass : BaseClass
{
static void Main()
{
var baseObject = new BaseClass();
var derivedObject = new DerivedClass();
// Error CS1540, because myValue can only be accessed by
// classes derived from BaseClass.
// baseObject.myValue = 10;
// OK, because this class derives from BaseClass.
derivedObject.myValue = 10;
}
}
此範例包含兩個檔案:Assembly1.cs
和 Assembly2.cs
。
第一個檔案包含公用的基底類別 BaseClass
,以及另一個類別 TestAccess
。 BaseClass
擁有 protected internal 成員 myValue
,它是由 TestAccess
類型存取。
在第二個檔案中,嘗試透過 BaseClass
的執行個體存取 myValue
會產生錯誤,而透過衍生類別 DerivedClass
的執行個體存取這個成員時會成功。
結構成員不可以是 protected internal
,因為無法繼承結構。
覆寫受保護的內部成員
覆寫虛擬成員時,覆寫方法的協助工具修飾元取決於定義衍生類別所在的組件。
在與基底類別相同的組件中定義衍生類別時,所有覆寫的成員都具有 protected internal
存取權。 如果衍生類別是在與基底類別不同的組件中定義,覆寫的成員具有 protected
存取權。
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal virtual int GetExampleValue()
{
return 5;
}
}
public class DerivedClassSameAssembly : BaseClass
{
// Override to return a different example value, accessibility modifiers remain the same.
protected internal override int GetExampleValue()
{
return 9;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClassDifferentAssembly : BaseClass
{
// Override to return a different example value, since this override
// method is defined in another assembly, the accessibility modifiers
// are only protected, instead of protected internal.
protected override int GetExampleValue()
{
return 2;
}
}
C# 語言規格
如需詳細資訊,請參閱<C# 語言規格>。 語言規格是 C# 語法及用法的限定來源。