0

通常、カスタム Attribute クラスを作成すると、getter と setter を持つパブリック プロパティは、クラスに属性を適用する人に自動的に公開されるため、属性を使用する人はそのプロパティの値を指定できます。

特定のプロパティのゲッターとセッターを公開するカスタム属性クラスが必要ですが、作成時にこのプロパティを属性の名前付き引数として指定することはできません。例:

[AttributeUsage(AttributeTargets.Class)]
class MyCustomAttribute : Attribute
{
    public bool MyProperty
    {
        get { /* do something */ }
        set { /* do something */ }
    }
}


// The following line should be a compiler error, MyProperty should
// be hidden for attribute initialization!
[MyCustomAttribute(MyProperty=true)]
class MyClass
{
};

これを達成する方法はありますか?

4

2 に答える 2

2

internalコードの他の場所で使用するつもりであるが、他の人に見られたくない場合は、単純にプロパティ (または単にプロパティ セッター) を作成できます。

または、プロパティを他のユーザーに公開したいが、宣言構文での設定を許可しない場合は、プロパティ セッターを公開できませんが、必要に応じて値を設定する別のメソッドを提供できます。

class MyCustomAttribute : Attribute
{
    public bool MyProperty
    {
        get { /* do something */ }
    }

    public void SetMyProperty(bool value)
    {
        /* do something */
    }
}
于 2013-10-22T22:48:22.010 に答える
1

プロパティがパブリックの場合、属性が適用されたときに割り当てられないようにする方法はありません。コメントで dtb が示唆しているように、代わりに getter メソッドと setter メソッドを使用できますが、おそらく役に立たないでしょう...

実行時に属性を変更することはできません。リフレクションを使用してクラスまたはメンバー (またはその他のもの) から属性を取得すると、これらの属性のコピーのみが取得されるため、それらを変更したとしても、次にそれらを取得するときに、変更されていない新しいコピーが取得されます。

于 2013-10-22T22:49:14.087 に答える