Наследование пользовательских атрибутов на абстрактных свойствах

У меня есть пользовательский атрибут, что я хочу обратиться к своему основному абстрактному классу так, чтобы я мог пропустить элементы, которые не должны быть просмотрены пользователем при отображении объекта в HTML. Кажется, что свойства, переопределяющие базовый класс, не наследовали атрибуты.

Переопределение основывает свойства (абстрактный, или виртуальный) сдувают атрибуты, помещенные в исходное свойство?

От класса Атрибута Defination

[AttributeUsage(AttributeTargets.Property,
                Inherited = true,
                AllowMultiple = false)]
public class NoHtmlOutput : Attribute
{
}

От абстрактного класса Defination

[NoHtmlOutput]
public abstract Guid UniqueID { get; set; }

От реального класса Defination

public override Guid UniqueID{ get{ return MasterId;} set{MasterId = value;}}

От проверки класса атрибут

        Type t = o.GetType();
        foreach (PropertyInfo pi in t.GetProperties())
        {
            if (pi.GetCustomAttributes(typeof(NoHtmlOutput), true).Length == 1)
                continue;
            // processing logic goes here
        }
45
задан Marty Trenouth 25 March 2010 в 23:00
поделиться

2 ответа

Нет, атрибуты наследуются.

Это метод GetCustomAttributes () , который не просматривает родительские объявления. Он смотрит только на атрибуты, примененные к указанному члену. Из документации :

Примечания

Этот метод игнорирует параметр наследования для свойств и событий. Для поиска в цепочке наследования для {{1 }} атрибутов свойств и событий, используйте соответствующие перегрузки метода Attribute .. ::. GetCustomAttributes .

30
ответ дан 26 November 2019 в 21:11
поделиться

Похоже, это происходит только тогда, когда метод переопределения также имеет атрибут.

http://msdn.microsoft.com/en-us/library/a19191fh.aspx

Однако вы можете переопределить атрибуты того же типа или применить дополнительные атрибуты к производному компоненту. В следующем фрагменте кода показан настраиваемый элемент управления, который переопределяет свойство Text, унаследованное от Control, переопределяя атрибут BrowsableAttribute, примененный в базовом классе. Visual Basic

Public Class MyControl
   Inherits Control
   ' The base class has [Browsable(true)] applied to the Text property.
   <Browsable(False)>  _
   Public Overrides Property [Text]() As String
      ...
   End Property 
   ...
End Class
0
ответ дан 26 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: