Как получить атрибуты переопределить свойства? - PullRequest
4 голосов
/ 30 августа 2011

Не работает Attribute.GetCustomAttribute :

using System;

class Program
{
    static void Main()
    {
        var p = typeof(MyClass2).GetProperty("Value");
        var a = Attribute.GetCustomAttribute(p, typeof(ObsoleteAttribute), true);
        Console.WriteLine(a != null);
    }
}

public class MyClass
{
    [Obsolete]
    public virtual string Value { get; set; }
}

public class MyClass2 : MyClass
{
    public override string Value { get; set; }
}

Вывод: False

Почему?

1 Ответ

4 голосов
/ 30 августа 2011

Если вы посмотрите на документы для ObsoleteAttribute, вы увидите, что AttributeUsage устанавливает Inherited в значение false, поэтому атрибут не наследуется переопределениемmembers.

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

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