1

AttributeUsage属性を持つ単純なクラスを作成しました。ビルドしようとすると、エラーが発生しました:

Attribute 'AttributeUsage' is only valid on classes derived from System.Attribute.

次に、クラスを Attribute から継承するようにしましたが、すべて問題ありません。

属性を使用すると、クラスAttributeUsageから継承する必要があります。Attribute私の質問は、メソッドに特定の署名を強制する属性を作成できますか?

助けてくれてありがとう!

4

1 に答える 1

0

私の理解が正しければ: あなたが探しているのは、属性によってコンパイルを制御するツールです。stylecop または fxcop がニーズに合っているかどうかを確認できます。または、Visual Studio を拡張してソース コード モデルにアクセスすることもできます。拡張機能によってソース コードがチェックされる場合があります ( http://blogs.msdn.com/b/sqlserverstorageengine/archive/2007/03/02/using-visual-studio-s-code-model-objects-for-code-baseを参照)。 -understanding.aspx )、属性を評価し、必要に応じてコンパイラの警告、エラーを生成します。

===================================

元の回答:

回答: 対応するコンストラクターを提供するだけです。

[AttributeUsage(AttributeTargets.All)]
public class HelpAttribute : System.Attribute
{
    // Required parameter
    public HelpAttribute(string url) 
    {
        this.Url = url;
    }

    // Optional parameter
    public string Topic { get; set; }

    public readonly string Url;


}

public class Whatever
{
    [Help("http://www.stackoverflow.com")]
    public int ID { get; set; }

    [Help("http://www.stackoverflow.com", Topic="MyTopic")]
    public int Wew { get; set; }

    // [Help] // without parameters does not compile
    public int Wow { get; set; }
}

許可されているパラメーターの種類は、MSDN にリストされています: http://msdn.microsoft.com/en-us/library/aa664615(v=vs.71).aspx

さらに読む: http://msdn.microsoft.com/en-us/library/aa288454(v=vs.71).aspx

于 2013-07-26T06:35:08.923 に答える