0
[MyAttribute(Name = "Test123"]
public MyClass
{
    public string Name 
    {
       get { return "Test123"; }
    }
}

このコードサンプルですか、名前を2回定義する必要があります。属性で1回、クラス自体で1回。この種の重複を回避する方法はありますか?

いつか、アセンブリを反復処理して、 MyAttributeを使用するすべてのクラスを検索し、それらを(名前とともに)リストするため、両方が必要です。また、インスタンス化されたオブジェクトにアクセスしたので、属性を使用したくありません。

4

2 に答える 2

2

名前を文字列定数に入れることができる場合は、その定数を属性パラメーターとプロパティの戻り値の両方に使用できます。

名前を変更する必要がある場合は、const値を変更するだけです。

[MyAttribute(MyClass.MyClassName)]
public MyClass
{
    private const string MyClassName = "Test123";

    public string Name 
    {
       get { return MyClass.MyClassName; }
    }
}
于 2012-07-30T18:29:58.960 に答える
1

次のようなものが機能する可能性があります。しかし、それは神のように非効率的です。以下のコードはテストしていませんが、近いはずです。

[MyAttribute(Name = "Test123"]
public MyClass
{
    public string Name 
    {
       get { return ((MyAttribute)(GetType().GetCustomAttributes(typeof(MyAttribute), true).First())).Name; }
    }
}

そもそもなぜ属性とプロパティが必要なのですか?特にName属性が「static」(型に付加されている)であり、プロパティがインスタンスであるため、両方が必要であるという事実は、悪臭を放ちます。

于 2012-07-30T18:06:36.437 に答える