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 等;您可以通过覆盖getter来继承DisplayNameAttribute和提供键的查找。DisplayName

于 2008-11-09T13:37:08.670 回答
3

细化。内置或自定义的属性只是类或类成员的元数据,而属性本身并没有表示它与某物相关联。

  • 该类型知道它自己的元数据
  • 元数据(在本例中为属性)不知道它属于谁
于 2008-11-09T13:15:23.160 回答
1

从您的句子“我只想使用反射设置一个友好名称”中,我认为您想在运行时将“MyFriendlyNameForThisClass”名称设置为属性。如果是这样,我认为这是不可能的。请看这个线程

于 2008-11-09T12:56:25.460 回答
1

这很笨拙,但是您可以遍历程序集中的所有类,测试每个“是”此实例的自定义属性。

于 2009-01-21T23:43:24.300 回答