AttributeUsageAttribute.Inherited AttributeUsageAttribute.Inherited AttributeUsageAttribute.Inherited AttributeUsageAttribute.Inherited Property

Definizione

Ottiene o imposta un valore Boolean che determina se l'attributo indicato può essere ereditato dalle classi derivate e dai membri di override.Gets or sets a Boolean value that determines whether the indicated attribute is inherited by derived classes and overriding members.

public:
 property bool Inherited { bool get(); void set(bool value); };
public bool Inherited { get; set; }
member this.Inherited : bool with get, set
Public Property Inherited As Boolean

Valore della proprietà

true se l'attributo può essere ereditato dalle classi derivate e dai membri di override; in caso contrario, false.true if the attribute can be inherited by derived classes and overriding members; otherwise, false. Il valore predefinito è true.The default is true.

Esempi

Nell'esempio seguente viene illustrata la differenza tra un attributo a cui AttributeUsageAttribute viene Inherited applicato un Inherited attributo con un true valore della proprietà e uno a AttributeUsageAttribute cui l'attributo con il valore della proprietà false viene applicato.The following example illustrates the difference between an attribute to which an AttributeUsageAttribute attribute with an Inherited property value of true is applied and one to which AttributeUsageAttribute attribute with an Inherited property value of false is applied . Nell'esempio vengono definiti due attributi InheritedAttribute , NotInheritedAttributee.The example defines two attributes, InheritedAttribute and NotInheritedAttribute. Entrambi gli attributi possono essere applicati a classi e metodi.Both attributes can apply to classes and methods. Poiché la Inherited AttributeUsageAttribute proprietà dell'attributo applicato a InheritedAttribute è true, viene ereditata dalle classi derivate e dai membri delle classi derivate che eseguono l'override del metodo della classe base.Because the Inherited property of the AttributeUsageAttribute attribute applied to InheritedAttribute is true, it is inherited by derived classes and the members of derived classes that override the base class method. D'altra parte, poiché Inherited la proprietà AttributeUsageAttribute dell'attributo applicato a NotInheritedAttribute è false, non viene ereditata dalle classi derivate e dai membri delle classi derivate che eseguono l'override del metodo della classe base.On the other hand, because the Inherited property of the AttributeUsageAttribute attribute applied to NotInheritedAttribute is false, it is not inherited by derived classes and the members of derived classes that override the base class method.

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method |
                AttributeTargets.Property | AttributeTargets.Field,
                Inherited = true)]
public class InheritedAttribute : Attribute
{ }

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method |
                AttributeTargets.Property | AttributeTargets.Field,
                Inherited = false)]
public class NotInheritedAttribute : Attribute
{ }
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Method _
                Or AttributeTargets.Property Or AttributeTargets.Field,
                Inherited:=True)>
Public Class InheritedAttribute : Inherits Attribute
End Class

<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Method _
                Or AttributeTargets.Property Or AttributeTargets.Field,
                Inherited:=False)>
Public Class NotInheritedAttribute : Inherits Attribute
End Class

Nell'esempio vengono quindi definite due classi di base.The example then defines two base classes. Il primo, BaseA, dispone di un singolo metodo MethodA,.The first, BaseA, has a single method, MethodA. Il secondo, BaseB, dispone di un singolo metodo MethodB,.The second, BaseB, has a single method, MethodB. BaseAe MethodA sono contrassegnati con l' InheritedAttribute attributo BaseB e e MethodB sono contrassegnati con l' NotInheritedAttribute attributo.BaseA and MethodA are tagged with the InheritedAttribute attribute, and BaseB and MethodB are tagged with the NotInheritedAttribute attribute. DerivedAeredita da BaseA ed esegue l' MethodA override del relativo metodo.DerivedA inherits from BaseA and overrides its MethodA method. DerivedBeredita da BaseB ed esegue l' MethodB override del relativo metodo.DerivedB inherits from BaseB and overrides its MethodB method.

using System;
using System.Reflection;

[InheritedAttribute]
public class BaseA
{
    [InheritedAttribute]
    public virtual void MethodA()
    { }
}

public class DerivedA : BaseA
{
    public override void MethodA()
    { }
}

[NotInheritedAttribute]
public class BaseB
{
    [NotInheritedAttribute]
    public virtual void MethodB()
    { }
}

public class DerivedB : BaseB
{
    public override void MethodB()
    { }
}

public class Example
{
    public static void Main()
    {
        Type typeA = typeof(DerivedA);
        Console.WriteLine($"DerivedA has Inherited attribute: {typeA.GetCustomAttributes(typeof(InheritedAttribute), true).Length > 0}");
        MethodInfo memberA = typeA.GetMethod(nameof(DerivedA.MethodA));
        Console.WriteLine($"DerivedA.MemberA has Inherited attribute: {memberA.GetCustomAttributes(typeof(InheritedAttribute), true).Length > 0}\n");

        Type typeB = typeof(DerivedB);
        Console.WriteLine($"DerivedB has NotInherited attribute: {typeB.GetCustomAttributes(typeof(NotInheritedAttribute), true).Length > 0}");
        MethodInfo memberB = typeB.GetMethod(nameof(DerivedB.MethodB));
        Console.WriteLine($"DerivedB.MemberB has NotInherited attribute: {memberB.GetCustomAttributes(typeof(NotInheritedAttribute), true).Length > 0}");
    }
}
// The example displays the following output:
//       DerivedA has Inherited attribute: True
//       DerivedA.MemberA has Inherited attribute: True
//       
//       DerivedB has NotInherited attribute: False
//       DerivedB.MemberB has NotInherited attribute: False
Imports System.Reflection

<InheritedAttribute> Public Class BaseA
    <InheritedAttribute> Public Overridable Sub MethodA()
    End Sub
End Class

Public Class DerivedA : Inherits BaseA
    Public Overrides Sub MethodA()
    End Sub
End Class

<NotInheritedAttribute> Public Class BaseB
    <NotInheritedAttribute> Public Overridable Sub MethodB()
    End Sub
End Class

Public Class DerivedB : Inherits BaseB
    Public Overrides Sub MethodB()
    End Sub
End Class

Module Example
    Public Sub Main()
        Dim typeA As Type = GetType(DerivedA)
        Console.WriteLine($"DerivedA has Inherited attribute: {typeA.GetCustomAttributes(GetType(InheritedAttribute), True).Length > 0}")
        Dim memberA As MethodInfo = typeA.GetMethod(NameOf(DerivedA.MethodA))
        Console.WriteLine($"DerivedA.MemberA has Inherited attribute: {memberA.GetCustomAttributes(GetType(InheritedAttribute), True).Length > 0}")
        Console.WriteLine()

        Dim typeB As Type = GetType(DerivedB)
        Console.WriteLine($"DerivedB has NotInherited attribute: {typeB.GetCustomAttributes(GetType(NotInheritedAttribute), True).Length > 0}")
        Dim memberB As MethodInfo = typeB.GetMethod(NameOf(DerivedB.MethodB))
        Console.WriteLine($"DerivedB.MemberB has Inherited attribute: {memberB.GetCustomAttributes(GetType(NotInheritedAttribute), True).Length > 0}")
    End Sub
End Module
' The example displays the following output:
'       DerivedA has Inherited attribute: True
'       DerivedA.MemberA has Inherited attribute: True
'       
'       DerivedB has Inherited attribute: False
'       DerivedB.MemberB has Inherited attribute: False

Come illustrato nell'output dell'esempio, DerivedA ed DerivedA.MethodA ereditare l' InheritedAttribute attributo, ma DerivedB e DerivedB.MethodB non ereditano l' NotInheritedAttribute attributo.As the output from the example shows, DerivedA and DerivedA.MethodA inherit the InheritedAttribute attribute, but DerivedB and DerivedB.MethodB do not inherit the NotInheritedAttribute attribute.

Commenti

La Inherited proprietà determina:The Inherited property determines:

  • Indica se le classi derivate da una classe base contrassegnata con AttributeUsageAttribute l'attributo a cui è applicato l'attributo ereditano tale attributo.Whether classes derived from a base class tagged with the attribute to which the AttributeUsageAttribute attribute is applied inherit that attribute.

  • Indica se i metodi delle classi derivate che eseguono l'override di un metodo della classe AttributeUsageAttribute base con tag con l'attributo a cui è applicato l'attributo ereditano tale attributo.Whether methods of derived classes that override a base class method tagged with the attribute to which the AttributeUsageAttribute attribute is applied inherit that attribute. Se una classe eredita un membro della classe base, eredita anche tutti gli attributi applicati a tale membro.(If a class inherits a base class member, it also inherits any attributes applied to that member.)

Si applica a

Vedi anche