У меня есть настраиваемый атрибут, который можно назначить классу, [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)
}
}





Из вашего предложения «Я просто хочу установить понятное имя с помощью отражения», я думаю, вы хотите установить имя «MyFriendlyNameForThisClass» для атрибута во время выполнения. если так, то я не думаю, что это возможно. См. эта ветка.
Разрабатывать. Атрибут, встроенный или настраиваемый, - это просто метаданные для класса или члена класса, а сам атрибут не имеет обозначения, что он с чем-то связан.
Во-первых, вы можете рассмотреть существующий [DisplayName] для сохранения понятных имен. Как уже было сказано, вы просто не можете получить эту информацию внутри атрибута. Вы можете найти атрибут из Bar, но в целом единственный способ сделать это из атрибута - передать атрибут типа в, т.е.
[Foo("Some name", typeof(Bar)]
Что именно ты хочешь сделать? Могут быть и другие варианты ...
Обратите внимание, что для i18n, resx и т. Д .; вы можете создать подкласс DisplayNameAttribute и обеспечить поиск по ключам, переопределив получатель DisplayName.
Это неуклюже, но вы можете перебирать все классы в сборке, проверяя каждый на наличие настраиваемого атрибута, которым «является» этот экземпляр.