AttributeUsageAttribute.Inherited Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft einen Boolean-Wert ab, der bestimmt, ob das angegebene Attribut von abgeleiteten Klassen und überschreibenden Membern geerbt wird, oder legt diesen Wert fest.
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
Eigenschaftswert
true
, wenn das Attribut von abgeleiteten Klassen und überschreibenden Membern geerbt werden kann, andernfalls false
. Der Standardwert ist true
.
Beispiele
Das folgende Beispiel veranschaulicht den Unterschied zwischen einem Attribut, auf das ein Attribut mit einem Eigenschaftswert von angewendet wird, und einem Attribut, auf das ein Attribut mit einem Eigenschaftswert AttributeUsageAttribute Inherited von angewendet true
AttributeUsageAttribute Inherited false
wird. Im Beispiel werden zwei Attribute definiert: InheritedAttribute
und NotInheritedAttribute
. Beide Attribute können auf Klassen und Methoden angewendet werden. Da die -Eigenschaft des auf angewendeten Attributs ist, wird sie von abgeleiteten Klassen und den Membern abgeleiteter Klassen geerbt, die Inherited AttributeUsageAttribute die InheritedAttribute
true
Basisklassenmethode überschreiben. Da die -Eigenschaft des auf angewendeten Attributs ist, wird sie hingegen nicht von abgeleiteten Klassen und den Membern abgeleiteter Klassen geerbt, die die Inherited AttributeUsageAttribute NotInheritedAttribute
Basisklassenmethode false
überschreiben.
[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 ||| AttributeTargets.Method ||| AttributeTargets.Property ||| AttributeTargets.Field, Inherited = true)>]
type InheritedAttribute() =
inherit Attribute()
[<AttributeUsage(AttributeTargets.Class ||| AttributeTargets.Method ||| AttributeTargets.Property ||| AttributeTargets.Field, Inherited = false)>]
type NotInheritedAttribute() =
inherit 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
Im Beispiel werden dann zwei Basisklassen definiert. Die erste , BaseA
, verfügt über eine einzelne Methode, MethodA
. Die zweite , BaseB
, verfügt über eine einzelne Methode, MethodB
. BaseA
und MethodA
werden mit dem InheritedAttribute
-Attribut und und mit dem BaseB
MethodB
-Attribut NotInheritedAttribute
gekennzeichnet. DerivedA
erbt von BaseA
und überschreibt die MethodA
-Methode. DerivedB
erbt von BaseB
und überschreibt die MethodB
-Methode.
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
[<Inherited>]
type BaseA() =
abstract member MethodA: unit -> unit
[<Inherited>]
default _.MethodA() = ()
type DerivedA() =
inherit BaseA()
override _.MethodA() = ()
[<NotInherited>]
type BaseB() =
abstract member MethodB: unit -> unit
[<NotInherited>]
default _.MethodB() = ()
type DerivedB() =
inherit BaseB()
override _.MethodB() = ()
let typeA = typeof<DerivedA>
printfn $"DerivedA has Inherited attribute: {typeA.GetCustomAttributes(typeof<InheritedAttribute>, true).Length > 0}"
let memberA = typeA.GetMethod "MethodA"
printfn $"DerivedA.MemberA has Inherited attribute: {memberA.GetCustomAttributes(typeof<InheritedAttribute>, true).Length > 0}\n"
let typeB = typeof<DerivedB>
printfn $"DerivedB has NotInherited attribute: {typeB.GetCustomAttributes(typeof<NotInheritedAttribute>, true).Length > 0}"
let memberB = typeB.GetMethod "MethodB"
printfn $"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
Wie die Ausgabe des Beispiels zeigt, erben und DerivedA
DerivedA.MethodA
das InheritedAttribute
-Attribut, DerivedB
aber und DerivedB.MethodB
erben nicht das NotInheritedAttribute
-Attribut.
Hinweise
Die Inherited -Eigenschaft bestimmt:
Gibt an, ob Klassen, die von einer Basisklasse abgeleitet sind, die mit dem Attribut gekennzeichnet ist, auf AttributeUsageAttribute das das Attribut angewendet wird, dieses Attribut erben.
Gibt an, ob Methoden abgeleiteter Klassen, die eine Basisklassenmethode überschreiben, die mit dem Attribut gekennzeichnet ist, auf das das Attribut angewendet AttributeUsageAttribute wird, dieses Attribut erben. (Wenn eine Klasse einen Basisklassen member erbt, erbt sie auch alle Attribute, die auf diesen Member angewendet werden.)