Подтвердить что ты не робот

Как получить имя свойства, которое задано нашим атрибутом?

Я собираюсь сделать это, не передавая атрибут! Возможно ли это?

class MyAtt : Attribute {
    string NameOfSettedProperty() {
        //How do this? (Would be MyProp for example)
    }
}

class MyCls {
    [MyAtt]
    int MyProp { get { return 10; } }
}
4b9b3361

Ответ 1

Атрибуты - это метаданные, применяемые к элементам типа, самому типу, параметрам метода или сборке. Чтобы иметь доступ к метаданным, вы должны были иметь оригинальный член для пользователя GetCustomAttributes и т.д., Т. Е. Ваш экземпляр Type, PropertyInfo, FieldInfo и т.д.

В вашем случае я фактически передал бы имя свойства самому атрибуту:

public CustomAttribute : Attribute
{
  public CustomAttribute(string propertyName)
  {
    this.PropertyName = propertyName;
  }

  public string PropertyName { get; private set; }
}

public class MyClass
{
  [Custom("MyProperty")]
  public int MyProperty { get; set; }
}

Ответ 2

Используя CallerMemberNameAttribute из .NET 4.5:

public CustomAttribute([CallerMemberName] string propertyName = null)
{
    // ...
}

Ответ 3

вы не можете сделать это внутри самого класса атрибута. однако вы можете иметь метод, который принимает объект, получает список свойств этого объекта (если есть), которые используют этот атрибут. используйте этот API для реализации: http://msdn.microsoft.com/en-us/library/ms130869.aspx