繼承要求
套用至類別的繼承要求不同於套用至方法的繼承要求。 您可以在類別層級上放入繼承要求,以確保只有使用指定使用權限的程式碼可以繼承您的類別。 置於方法上的繼承要求會要求程式碼擁有指定的使用權限,才能覆寫該方法。
注意事項 |
---|
.NET Framework 4 版 已引進全新的透明度模型。安全性透明的程式碼,層級 2 模型使用 SecurityCriticalAttribute 或 SecuritySafeCriticalAttribute 屬性來識別安全程式碼。安全性關鍵程式碼要求呼叫端和繼承端都必須完全受信任。繼承自安全性關鍵型別或成員的任何型別或成員,都必須是安全性關鍵或安全性安全關鍵的型別或成員。使用先前的程式碼存取安全性規則 (層級 1) 的組件,可以呼叫完全受信任的層級 2 安全性關鍵型別和成員。不過,層級 2 的型別和成員必須具體識別繼承需求,因為層級 2 隱含繼承規則並不適用於層級 1 的呼叫端。 |
類別繼承要求
套用至類別的繼承要求和由擁有指定使用權限的父類別衍生的所有類別具有相同的需求效果。 例如,類別 B 是繼承自類別 A,而類別 A 是受繼承要求保護,則類別 B 必須被授與該使用權限才可執行。 如果類別 B 被授與該使用權限且衍生自類別 A,當類別 C 是衍生自類別 B 時,它也必須擁有類別 A 所需求的使用權限。 這個需求只可利用宣告方式來套用。
以下的程式碼範例將使用繼承要求,以指定任何繼承自 MyClass1 類別的類別必須擁有自訂使用權限 CustomPermissionAttribute。 這個使用權限是任意指定的自訂使用權限,並不存在於 .NET Framework 中。 以下程式碼會將一個 SecurityAction.InheritanceDemand 列舉型別值傳遞給 CustomPermissionAttribute 來設定需求。
<CustomPermissionAttribute(SecurityAction.InheritanceDemand)> _
Public Class MyClass1
Public Sub New()
End Sub
Public Overridable Function ReadData() As String
' Access a custom resource.
End Function
End Class
[CustomPermissionAttribute(SecurityAction.InheritanceDemand)]
public class MyClass
{
public MyClass()
{
}
public virtual string ReadData()
{
// Access a custom resource.
}
}
方法繼承要求
由於沒有相關的靜態方法,因此在基底類別的靜態方法上放置繼承要求對衍生類別並沒有影響。 然而,在基底類別的任何非靜態方法上放置繼承要求,其效果會與將繼承要求置於類別上的效果相同。 衍生類別中的所有方法 (包括類別中的建構函式 (Constructor)),都必須符合繼承要求。