搭配類別和成員範圍使用的宣告式安全性
宣告式安全性可以在類別、成員和巢狀類別 (Nested Class) 上執行。 本章節概述用來評估套用至相同類別不同層級之宣告式安全性的規則。
重要
在 .NET Framework 4 中,已經移除對強制 Deny、RequestMinimum、RequestOptional 和 RequestRefuse 使用權限要求的執行階段支援。在依據 .NET Framework 4 (含) 以後版本為基礎的程式碼上不可以使用這些要求。如需這項變更和其他變更的詳細資訊,請參閱 .NET Framework 中的安全性變更。
類別、成員和宣告式安全性
當類別層級和方法層級上相同的安全性動作具有宣告式安全性時,將會根據下表套用宣告式安全性。
安全性動作 |
.NET Framework 2.0 版的行為 |
.NET Framework 4的行為 |
---|---|---|
要求 |
方法層級屬性和類別層級屬性會一起聯合到這兩個層級的單一權限集合 |
在行為上沒有變更 |
連結要求 |
方法層級屬性和類別層級屬性會聯合 |
在行為上沒有變更 |
繼承要求 |
類別層級屬性需要指定的權限,才能自類別衍生 方法層級屬性需要指定的權限,才能覆寫衍生類別中的方法 由於繼承要求對於類別和方法的意義不同,因此可以將宣告分別套用至類別和方法兩種層級 |
在行為上沒有變更 |
Assert |
方法層級屬性和類別層級屬性會一起聯合到這兩個層級的單一權限集合 |
在行為上沒有變更 |
拒絕 |
方法層級屬性和類別層級屬性會一起聯合到這兩個層級的單一權限集合 |
在 .NET Framework 4 中已過時。 |
只允許 |
方法層級屬性和類別層級屬性會一起交集到這兩個層級的單一權限集合 |
在行為上沒有變更 |
安全性動作不同時 (例如,類別層級的需求搭配方法層級的判斷提示),無論如何都不會有互動,而且兩種動作都會被評估。
巢狀類別和宣告式安全性
當您將宣告式安全性套用至類別時,它並不會傳播到任何巢狀類別或巢狀類別的方法。 相反地,當您將宣告式安全性套用至巢狀類別或巢狀類別的方法時,它也不會傳播到父類別。 當您將宣告式安全性套用至巢狀類別時,應該將這些巢狀類別當做個別的類別。
下列範例顯示在 Main 類別的類別層級上要求的假定使用權限。 該類別中定義了一個名為 Nested 的巢狀類別。 在這個範例中,並未將需求套用至巢狀類別。
<SomePermissionAttribute(SecurityAction.Demand, Unrestricted:=True)> _
Public Class Main
' This nested class is not influenced by the demand.
Public Class Nested
' This method is not influenced by the demand.
Public Sub MyMethod()
End Sub
End Class
End Class
[SomePermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
class Main
{
// This nested class is not influenced by the demand.
class Nested
{
// This method is not influenced by the demand.
public void MyMethod()
{
}
}
}