4

サービス コントラクト インターフェイスに PrincipalPermission を配置できない技術的な理由はありますか? コントラクトを実装するクラスでのみ機能するか、クラス メソッドで直接機能します。

これはうまくいきません。

[ServiceContract]
public interface IMyService
{
    [PrincipalPermission(SecurityAction.Demand, Role="Admin")]
    [OperationContract]
    void MyFunction(string str);
}

しかし、IMyService を実装するクラスの一致するメソッドに属性を配置すると機能します。

4

2 に答える 2

3

ロールは、メソッドが実装するインターフェースに設定された属性ではなく、実装メソッドに設定された属性を使用して、実行時にチェックされます。より一般的には、.NETでは、メソッドに配置されたカスタム属性と、対応するインターフェイスメソッドに配置されたカスタム属性(存在する場合)との間に直接的な関係はありません。

于 2012-11-22T17:38:05.297 に答える
1

OPの質問に対する具体的な答えを提供しようとする投稿が古いことは知っていますが、その理由はインターフェースとクラスの違いにあります。

考えてみてください。インターフェイスは実装の記述であり、実装の動作ではありません。 インターフェイスは、クラス メソッドやイベントなどを記述するだけです。

または、マイクロソフトが言うように:

インターフェイスは、実装者が提供する必要がある一連のメンバーの署名を定義します。インターフェイスは、メンバーの実装の詳細~ (動作)を提供できません。

インターフェイスを継承するクラスは、これらのメソッドとイベントの動作を提供します。- つまり、インターフェースの[動作〜機能]を実装します

では、なぜインターフェースが:

値型のポリモーフィックな階層を提供する必要がある場合は、インターフェイスを定義してください。

多重継承と同様の効果を得るために、インターフェイスを定義することを検討してください。

https://msdn.microsoft.com/library/ms229013(v=vs.100).aspx

これが他の誰かの理解に役立つことを願っています。

于 2015-11-19T19:12:34.977 に答える