2008-11-09 80 views
4

我可以分到一个班,[FooAttribute]自定义属性。我想从属性中决定哪种类型实际上使用了我。例如如果我有:如何从自定义属性中确定附加类型?

[FooAttribute] 
public class Bar 
{ 
} 

在代码为FooAttribute,我怎么能确定它是Bar类添加我?我不是专门寻找酒吧类型,我只是想使用反射设置一个友好的名字。例如

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

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

回答

4

首先,你可能会考虑现有[DisplayName]为保持友好的名字。如前所述,您无法在属性中获取此信息。你可以看一下,从酒吧的属性,但在一般情况下,从属性做到这一点的唯一方法是将类型传递到属性 - 即

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

你想要做的它究竟是什么?可能有其他选项...

请注意,对于i18n,resx等;您可以继承DisplayNameAttribute并通过覆盖DisplayName获取方来提供从键中查找。

1

从你的一句“我只是想设置使用反射友好名称”我想你想的“MyFriendlyNameForThisClass”名称设置为在运行时的属性。如果是这样,我不认为这是可能的。请参阅this thread

3

要elaborat。内置或自定义的属性只是类或类成员的元数据,而属性本身不包含与某些内容相关的注释。它自己的元数据的

  • 类型知道
  • 元数据(在这种情况下,属性)不知道它属于谁
1

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