none
アンマネージコードのコードアクセス許可について RRS feed

  • 質問

  •  

    お世話になっております。

     

    コード アクセス セキュリティ アクセス許可要求をオフにする属性で、

    以下の2パターンがありますが、これはなにが違うのでしょうか。

    両方とも同じ動作をすることは確かめることができましたが、

    なぜゆえに、記述方法が2パータンあるのかがわかりません。

    ご教授ください。

     

     

    [SuppressUnmanagedCodeSecurity]
    class SafeNativeMethods

    {

    ]

     

    [SuppressUnmanagedCodeSecurityAttribute()]
    class SafeNativeMethods

    {

    }

     

    2008年9月16日 7:16

回答

  • 具体的なことはここに書かれています。
    C# 言語の仕様 17.2 属性の指定

    まず、Attribute サフィクスの有無についてはそのまま記述がありますね。
    () の有無は、細かい定義を見ていかないと導けませんが、

    attribute:
    attribute-name   attribute-argumentsopt
    attribute-arguments:
    (   positional-argument-listopt   )

    (   positional-argument-list   ,   named-argument-list   )

    (   named-argument-list   )

    とあります。opt は本来下付き文字だか上付き文字だかで書かれるもので、このパラメータは省略可能って意味です。
    属性名の後ろ、その属性に引数が必要なければ attribute-arguments 自体を省略可能です。この場合、属性名だけの指定になります。
    また、省略しない場合、( ) は必須ですが、その中身の positional-argument-list や named-argument-list は省略可能です。この場合、名前の後ろに () だけ付くことになります。
    なお、positional-argument-list は名前なし引数(のリスト)のことで、その属性クラスのコンストラクタ引数に渡されます。
    named-argument-list は名前付き引数(のリスト)で、その属性クラスのフィールドやプロパティに割り当てられます。

    // オンラインで言語仕様を調べにくくて困るなぁ。
    2008年9月16日 8:04

すべての返信

  • 具体的なことはここに書かれています。
    C# 言語の仕様 17.2 属性の指定

    まず、Attribute サフィクスの有無についてはそのまま記述がありますね。
    () の有無は、細かい定義を見ていかないと導けませんが、

    attribute:
    attribute-name   attribute-argumentsopt
    attribute-arguments:
    (   positional-argument-listopt   )

    (   positional-argument-list   ,   named-argument-list   )

    (   named-argument-list   )

    とあります。opt は本来下付き文字だか上付き文字だかで書かれるもので、このパラメータは省略可能って意味です。
    属性名の後ろ、その属性に引数が必要なければ attribute-arguments 自体を省略可能です。この場合、属性名だけの指定になります。
    また、省略しない場合、( ) は必須ですが、その中身の positional-argument-list や named-argument-list は省略可能です。この場合、名前の後ろに () だけ付くことになります。
    なお、positional-argument-list は名前なし引数(のリスト)のことで、その属性クラスのコンストラクタ引数に渡されます。
    named-argument-list は名前付き引数(のリスト)で、その属性クラスのフィールドやプロパティに割り当てられます。

    // オンラインで言語仕様を調べにくくて困るなぁ。
    2008年9月16日 8:04
  • ご返事ありがとうございます。

     

    属性の仕様についても勉強してみます。

    上記の説明文は要点をついてわかりやすいです。

     

    ありがとうございました。

    (正直難しいです。C# いや.NET)

     

     

    2008年9月16日 11:08
  • 端的に言うと、 ~Attributeは省略可能ということですね。

    Code Snippet

    //自作属性クラス

    public class MyAttribute : Attribute{}

    //作成した属性の付与
    [My]
    public partial class UserControl1 : UserControl
    {
    public UserControl1()
    {
    InitializeComponent();
    }
    }



    2008年9月16日 12:21