共用方式為


需求

您可以使用安全性宣告式或命令式需求呼叫,以指定直接或間接呼叫端存取類別庫時必須擁有的使用權限。直接呼叫端會明確地呼叫您類別庫的靜態或執行個體方法,而間接呼叫端則會以呼叫您類別庫的另一個類別庫來呼叫您類別庫的靜態或執行個體方法。當您使用需求時,只有在所有的直接或間接呼叫端都擁有需求指定的使用權限的情況下,才會執行包含您程式碼的應用程式。當您類別庫使用的受保護資源不想由未受信任的程式碼存取時,需求就非常有用。需求可以放入使用命令式或宣告式語法的程式碼內。

請注意 .NET Framework 中大部份的類別都已和需求關聯,因此當您使用類別存取受保護的資源時並不需要再設定額外的需求。例如,StreamWriter 類別會在 FileIOPermission 開啟時自動為它設定一個安全性需求。如果您在使用 StreamWriter 類別時設定了一個 FileIOPermission 需求,將會產生一個多餘且無效的堆疊查核行程。您應該使用需求以保護需要自訂使用權限的自訂資源。

需求可以是宣告式的,也可以是命令式的。

宣告式需求

宣告式需求會將資訊放入使用屬性的程式碼其中繼資料內。您可以使用宣告式語法將需求放在程式碼的類別或方法等級。

如果您將一個宣告式安全性檢查置於類別等級上,它將會套用至每一個類別成員。然而,如果您將一個宣告式安全性檢查置於成員等級上,它只會套用至該成員,並覆寫在類別等級上所指定的使用權限 (如存在時)。例如,假設您在類別等級上指定 PermissionA,並在該類別的 Method1 上指定 PermissionB。當 Method1 被呼叫時,安全性檢查將只會尋找 PermissionB,但類別的其他方法仍會要求 PermissionA。

以下的範例會在 ReadData 方法的所有呼叫端上放入一個 CustomPermission 自訂使用權限的宣告式需求。這個使用權限是任意指定的自訂使用權限,並不存在於 .NET Framework 中。這個自訂使用權限使用一個單獨定義的 CustomPermissionAttribute 來設定需求。在這個範例中,它會取得一個 SecurityAction.Demand 旗標,以指定屬性將執行的需求類型。

<CustomPermissionAttribute(SecurityAction.Demand, Unrestricted := True)>Public Shared Function  ReadData() As String
   'Read from a custom resource.
End Function
[C#]
[CustomPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
public static string ReadData()
{
   //Read from a custom resource.
}

命令式需求

命令式需求會建立一個使用權限物件的新執行個體並呼叫該物件的 Demand 方法,而將它放在您程式碼的方法等級。命令式語法不可在類別等級上放入需求。

放在程式碼內的命令式需求可以有效地協助保護 Demand 方法所呼叫方法中的其餘程式碼。執行 Demand 時同時也會執行安全性檢查;如果安全性檢查失敗,則會擲回一個 SecurityException,而在取得並處理 SecurityException 之前,將不會執行該方法或成員中的其餘程式碼。

以下的範例會使用命令式語法,在自訂使用權限 CustomPermission 的所有呼叫端上放入一個需求。這個程式碼會建立一個 CustomPermission 類別的新執行個體,並將 PermissionState.Unrestricted 旗標傳遞給建構函式。然後再呼叫 Demand 方法。

Public Shared Sub ReadData()
   Dim MyPermission As New CustomPermission(PermissionState.Unrestricted)
   MyPermission.Demand()
   'Read from a custom resource.
End Sub  
[C#]
public static void ReadData()
{
   CustomPermission MyPermission = new CustomPermission(PermissionState.Unrestricted);
   MyPermission.Demand();

   //Read from a custom resource.
}

請參閱

使用屬性 (Attribute) 擴充中繼資料 | 安全性需求 | 程式碼存取安全性 | 建立您自己的程式碼存取使用權限 | 加入宣告式安全性支援 | 撰寫安全類別庫 | SecurityException 類別