搭配類別和成員範圍使用的宣告式安全性
更新:2007 年 11 月
宣告式安全性可以在類別、成員和巢狀類別 (Nested Class) 上執行。本章節概述用來評估套用至相同類別不同層級之宣告式安全性的規則。
類別、成員和宣告式安全性
當類別層級和方法層級上相同的安全性動作具有宣告式安全性時,將會根據下表套用宣告式安全性。
安全性動作 |
.NET Framework 1.0 版和 1.1 版的行為 |
NET Framework 2.0 版的行為 |
---|---|---|
要求 |
方法層級屬性會覆寫類別層級屬性 (如果宣告式要求是在方法層級上,將會忽略類別層級的宣告式要求) |
方法層級屬性和類別層級屬性會一起聯合到這兩個層級的單一權限集合 |
連結要求 |
方法層級屬性和類別層級屬性會聯合 |
在行為上沒有變更 |
繼承要求 |
類別層級屬性需要指定的權限,才能自類別衍生 方法層級屬性需要指定的權限,才能覆寫衍生類別中的方法 由於繼承要求對於類別和方法的意義不同,因此可以將宣告分別套用至類別和方法兩種層級 |
在行為上沒有變更 |
判斷提示 |
方法層級屬性會覆寫類別層級屬性 |
方法層級屬性和類別層級屬性會一起聯合到這兩個層級的單一權限集合 |
拒絕 |
方法層級屬性會覆寫類別層級屬性 |
方法層級屬性和類別層級屬性會一起聯合到這兩個層級的單一權限集合 |
只允許 |
方法層級屬性會覆寫類別層級屬性 |
方法層級屬性和類別層級屬性會一起交集到這兩個層級的單一權限集合 |
安全性動作不同時 (例如,類別層級的需求搭配方法層級的判斷提示),無論如何都不會有互動,而且兩種動作都會被評估。
巢狀類別和宣告式安全性
當您將宣告式安全性套用至類別時,它並不會傳播到任何巢狀類別或巢狀類別的方法。相反地,當您將宣告式安全性套用至巢狀類別或巢狀類別的方法時,它也不會傳播到父類別。當您將宣告式安全性套用至巢狀類別時,應該將這些巢狀類別當做個別的類別。
下列範例顯示在 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()
{
}
}
}