Доступ к классу и имени свойства внутри атрибута - PullRequest
7 голосов
/ 29 июля 2011

Есть ли способ получить доступ к имени класса и свойства, к которому вы прикрепили свойство внутри атрибута?

Например

public class User {
    public string Email { get; set; }
    public string FirstName { get; set; }

    [MyAttrubute]
    public string LastName { get; set; }
}

А потом в классе MyAttribute

public class MyAttributeAttribute {
    public MyAttributeAttribute () : base() {
        string className = /*GET CLASS NAME - should return "User" */
        string propertyName = /*GET PROPERTY NAME - should return LastName*/
    }
}

Я знаю, что могу передать информацию в конструкторе, но надеюсь, что есть простой способ сэкономить на повторном вводе информации снова или снова, с помощью отражения или ...

1 Ответ

7 голосов
/ 29 июля 2011

Извините, но нет, это невозможно. Вы также можете иметь

public class User {
    public string Email { get; set; }
    public string FirstName { get; set; }

    [MyAttrubute]
    public string LastName { get; set; }
}

[MyAttrubute]
public class OtherClass {

    [MyAttrubute]
    public string AnotherProperty { get; set; }
}

Атрибут может быть создан из любого места. Даже следующий способ является допустимым способом создания экземпляра:

var att = new MyAttribute();

Ваш вопрос можно свести к следующему: «Могу ли я определить, откуда создается мой пользовательский класс?». В моем последнем примере, вероятно, можно использовать StackTrace . Но с атрибутами они создаются средой выполнения .NET, поэтому вы не сможете пойти по этому пути.

...