получить класс атрибутов - PullRequest
2 голосов
/ 13 мая 2011

Возможно ли в C # в конструкторе атрибута получить класс, которому присвоен атрибут, без необходимости передавать имя этого класса.

    [MyAttr]
    public class A{}

    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
    [Serializable]
    public class MyAttrAttribute: Attribute
    {
        public MyAttrAttribute()
        {
           //get info here about the class A etc
        }    
    }

Ответы [ 3 ]

3 голосов
/ 13 мая 2011

Экземпляры атрибутов полностью независимы от типов / полей / свойств, которые они украшают; нет абсолютно никакого способа получить доступ к контексту из атрибута. Однако атрибуты также не создаются , пока вы явно не запросите их с отражением.

Если вы хотите вызвать некоторую логику, то это должно быть сделано явно через код - поэтому вы можете рассмотреть возможность добавления метода к вашему атрибуту , который принимает объект контекста :

public void Invoke(object instance) {...}

например, затем используйте GetCustomAttribute для его получения, приведите его и вызовите .Invoke()

2 голосов
/ 13 мая 2011

Нет. Но почему вы хотите это сделать? Чего ты пытаешься достичь?

Когда вы извлекаете атрибут во время выполнения, вы делаете это из объекта типа, представляющего класс. Поэтому, хотя информация не хранится в объекте атрибута, она легко доступна.

0 голосов
/ 13 мая 2011

Это была бы удобная функция, хороший вопрос. Но по сути атрибуты предназначены только для того, чтобы инспекторы были метаданными, а не инспекторами - это постоянные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...