继承的属性
本文关键字:属性 继承 | 更新日期: 2023-09-27 18:32:22
>属性代码
[AttributeUsage(AttributeTargets.Property, Inherited = true)]
class IgnoreAttribute : Attribute
{
}
基类
abstract class ManagementUnit
{
[Ignore]
public abstract byte UnitType { get; }
}
主类
class Region : ManagementUnit
{
public override byte UnitType
{
get { return 0; }
}
private static void Main()
{
Type t = typeof(Region);
foreach (PropertyInfo p in t.GetProperties())
{
if (p.GetCustomAttributes(typeof(IgnoreAttribute), true).Length != 0)
Console.WriteLine("have attr");
else
Console.WriteLine("don't have attr");
}
}
}
输出:don't have attr
解释为什么会这样?毕竟,它必须继承。
继承的标志指示是否可以继承该属性。 此值的默认值为 false。但是,如果继承的标志是 设置为 true,其含义取决于允许倍数的值 旗。如果继承的标志设置为 true 并且 AllowMultiple 标志 如果为 false,则该属性将覆盖继承的属性。 但是,如果继承的标志设置为 true 并且允许倍数 标志也设置为 true,属性在成员上累积。
与 http://aclacl.brinkster.net/InsideC/32ch09f.htm 相比查看指定继承属性规则一章
编辑:检查抽象属性上自定义属性的继承第一个答案:
它是不查看父级的 GetCustomAttributes() 方法。 声明。它仅查看应用于指定属性的属性 成员。
对于属性和事件,将忽略 PropertyInfo.GetCustomProperties 中的继承标志,如 https://msdn.microsoft.com/en-us/library/dwc6ew1d.aspx .但是,您可以使用 Attribute.GetCustomAttributes 重载之一来启用属性(或事件)的继承。
此问题在以下文件中进行了更详细的讨论:http://blog.seancarpenter.net/2012/12/15/getcustomattributes-and-overridden-properties/