У меня есть пользовательский атрибут, что я хочу обратиться к своему основному абстрактному классу так, чтобы я мог пропустить элементы, которые не должны быть просмотрены пользователем при отображении объекта в 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
}
Нет, атрибуты наследуются.
Это метод GetCustomAttributes ()
, который не просматривает родительские объявления. Он смотрит только на атрибуты, примененные к указанному члену. Из документации :
Примечания
Этот метод игнорирует параметр наследования для свойств и событий. Для поиска в цепочке наследования для {{1 }} атрибутов свойств и событий, используйте соответствующие перегрузки метода Attribute .. ::. GetCustomAttributes .
Похоже, это происходит только тогда, когда метод переопределения также имеет атрибут.
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