AttributeUsageAttribute.Inherited プロパティ

定義

示された属性が派生クラスによって継承され、メンバーをオーバーライドするかどうかを決定する Boolean 値を取得または設定します。

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

プロパティ値

Boolean

属性が派生クラスにより継承され、メンバーをオーバーライドする場合は true。それ以外の場合は false。 既定値は、true です。

次の例は、プロパティ値がの属性が適用される属性と、プロパティ値がである属性が適用される属性の違いを示してい AttributeUsageAttribute Inherited true AttributeUsageAttribute Inherited false ます。 この例では、とという2つの属性を定義し InheritedAttribute NotInheritedAttribute ます。 どちらの属性も、クラスとメソッドに適用できます。 Inheritedに適用された属性のプロパティはであるため AttributeUsageAttribute InheritedAttribute true 、派生クラスおよび基底クラスのメソッドをオーバーライドする派生クラスのメンバーによって継承されます。 一方、 Inherited に適用された属性のプロパティはであるため、 AttributeUsageAttribute NotInheritedAttribute false 派生クラスおよび基底クラスのメソッドをオーバーライドする派生クラスのメンバーによって継承されることはありません。

[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

この例では、2つの基底クラスを定義します。 1つ目のには、と BaseA いう1つのメソッドがあり MethodA ます。 2番目のには、と BaseB いう1つのメソッドがあり MethodB ます。 BaseAMethodA は属性でタグ付けされ、 InheritedAttribute BaseBMethodB は属性でタグ付けされ NotInheritedAttribute ます。 DerivedA から継承 BaseA し、そのメソッドをオーバーライドし MethodA ます。 DerivedB から継承 BaseB し、そのメソッドをオーバーライドし 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
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

この例の出力が示すように、とは属性を継承しますが、属性を継承し DerivedA DerivedA.MethodA InheritedAttribute DerivedB DerivedB.MethodB ません NotInheritedAttribute

注釈

プロパティは次の値 Inherited を決定します。

  • 属性が適用される属性でタグ付けされた基底クラスから派生したクラスがその属性を継承するかどうか AttributeUsageAttribute

  • 属性が適用される属性でタグ付けされた基底クラスのメソッドをオーバーライドする派生クラスのメソッドが、その属性を継承するかどうか AttributeUsageAttribute 。 (クラスが基底クラスのメンバーを継承している場合は、そのメンバーに適用されているすべての属性も継承します)。

適用対象

こちらもご覧ください