AttributeUsageAttribute.Inherited Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Belirtilen özniteliğin türetilmiş sınıflar ve geçersiz kılma üyeleri tarafından devralınıp devralınmadığını belirleyen bir Boolean değer alır veya ayarlar.
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
Özellik Değeri
true
özniteliği türetilmiş sınıflar ve geçersiz kılma üyeleri tarafından devralınabiliyorsa; aksi takdirde , false
. Varsayılan değer: true
.
Örnekler
Aşağıdaki örnek, özellik değerine sahip bir özniteliğin AttributeUsageAttribute uygulandığı öznitelik ile bir özellik değerine true
false
sahip Inherited Inherited özniteliğin AttributeUsageAttribute uygulandığı öznitelik arasındaki farkı gösterir. Örnek, ve NotInheritedAttribute
iki özniteliği InheritedAttribute
tanımlar. Her iki öznitelik de sınıflara ve yöntemlere uygulanabilir. Inherited için uygulanan InheritedAttribute
özniteliğinin AttributeUsageAttribute özelliği olduğundantrue
, türetilmiş sınıflar ve temel sınıf yöntemini geçersiz kılan türetilmiş sınıfların üyeleri tarafından devralınır. Öte yandan, uygulanan özniteliğinin NotInheritedAttribute
AttributeUsageAttribute özelliği olduğundanfalse
, Inherited türetilmiş sınıflar ve temel sınıf yöntemini geçersiz kılan türetilmiş sınıfların üyeleri tarafından devralınmamıştır.
[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
Örnek daha sonra iki temel sınıf tanımlar. İlk olan BaseA
, tek bir yöntemine sahiptir: MethodA
. İkinci olan BaseB
, tek bir yöntemine sahiptir: MethodB
. BaseA
ve MethodA
özniteliğiyle InheritedAttribute
etiketlenir ve BaseB
MethodB
özniteliğiyle NotInheritedAttribute
etiketlenir. DerivedA
öğesini devralır BaseA
ve yöntemini geçersiz kılar MethodA
. DerivedB
öğesini devralır BaseB
ve yöntemini geçersiz kılar MethodB
.
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
Örnekteki çıktıda gösterildiği gibi özniteliğini DerivedA
DerivedA.MethodA
devralın InheritedAttribute
ancak DerivedB
DerivedB.MethodB
özniteliği devralmayın NotInheritedAttribute
.
Açıklamalar
Inherited özelliği aşağıdakileri belirler:
Özniteliğin uygulandığı öznitelikle etiketlenmiş bir temel sınıftan türetilen sınıfların AttributeUsageAttribute bu özniteliği devralıp devralmadığı.
Özniteliğin uygulandığı öznitelikle etiketlenmiş bir temel sınıf yöntemini geçersiz kılan türetilmiş sınıfların yöntemlerinin AttributeUsageAttribute bu özniteliği devralıp devralmadığı. (Bir sınıf temel sınıf üyesini devralırsa, o üyeye uygulanan tüm öznitelikleri de devralır.)