7

クラスに割り当てることができるカスタム属性があります[FooAttribute]。私がやりたいことは、属性内から、どのタイプが実際に私を使用したかを判断することです。たとえば、私が持っている場合:

[FooAttribute]
public class Bar
{
}

FooAttribute のコードで、私を追加したのが Bar クラスであったことをどのように判断できますか? 特に Bar タイプを探しているわけではありません。リフレクションを使用してわかりやすい名前を設定したいだけです。例えば

[FooAttribute(Name="MyFriendlyNameForThisClass")]
public class Bar
{
}

public class FooAttribute()
{
  public FooAttribute()
  {
    // How do I get the target types name? (as a default)
  }
}
4

4 に答える 4

5

[DisplayName]まず、親しみやすい名前を維持するために既存のものを検討するかもしれません。すでに説明したように、属性内でこの情報を取得することはできません。Barから属性を検索できますが、一般に、属性から検索する唯一の方法は、タイプ属性に渡すことです。

[Foo("Some name", typeof(Bar)]

あなたは正確に何をしたいですか?他のオプションがあるかもしれません...

i18n、resxなどの場合は注意してください。ゲッターDisplayNameAttributeをオーバーライドすることで、キーからのルックアップをサブクラス化して提供できます。DisplayName

于 2008-11-09T13:37:08.670 に答える
3

精緻化する。組み込みまたはカスタムの属性は、クラスまたはクラス メンバーの単なるメタ データであり、属性自体には、それが何かに関連付けられているという表記はありません。

  • タイプはそれ自身のメタデータを知っています
  • メタデータ (この場合は属性) は、それが誰のものであるかを知りません
于 2008-11-09T13:15:23.160 に答える
1

不器用ですが、アセンブリ内のすべてのクラスを反復処理して、このインスタンス「である」カスタム属性についてそれぞれをテストすることができます。

于 2009-01-21T23:43:24.300 に答える
1

「リフレクションを使用してわかりやすい名前を設定したい」という文から、実行時に「MyFriendlyNameForThisClass」という名前を属性に設定したいと思います。もしそうなら、それは不可能だと思います。このスレッドを参照してください。

于 2008-11-09T12:56:25.460 に答える