属性のInherited
boolプロパティは何を指しますか?
クラスを属性AbcAtribute
(Inherited = true
)、およびそのクラスから別のクラスを継承する場合、派生クラスにも同じ属性が適用されますか?
コード例を使用してこの質問を明確にするには、次のことを想像してください。
[AttributeUsage(AttributeTargets.Class, Inherited = true)]
public class Random: Attribute
{ /* attribute logic here */ }
[Random]
class Mother
{ }
class Child : Mother
{ }
Child
にもRandom
属性が適用されていますか?
Inherited = true(デフォルト)の場合、作成している属性は、属性によって装飾されたクラスのサブクラスによって継承できることを意味します。
したがって-[AttributeUsage(Inherited = true)]でMyUberAttributeを作成する場合
[AttributeUsage (Inherited = True)]
MyUberAttribute : Attribute
{
string _SpecialName;
public string SpecialName
{
get { return _SpecialName; }
set { _SpecialName = value; }
}
}
次に、スーパークラスを装飾して属性を使用します...
[MyUberAttribute(SpecialName = "Bob")]
class MySuperClass
{
public void DoInterestingStuf () { ... }
}
MySuperClassのサブクラスを作成すると、この属性が設定されます...
class MySubClass : MySuperClass
{
...
}
次に、MySubClassのインスタンスをインスタンス化します...
MySubClass MySubClassInstance = new MySubClass();
次に、属性があるかどうかをテストします...
MySubClassInstance <--- SpecialName値として「Bob」を含むMyUberAttributeが追加されました。
はい、それはまさにそれが意味するものです。 属性
[AttributeUsage(Inherited=true)]
public class FooAttribute : System.Attribute
{
private string name;
public FooAttribute(string name)
{
this.name = name;
}
public override string ToString() { return this.name; }
}
[Foo("hello")]
public class BaseClass {}
public class SubClass : BaseClass {}
// outputs "hello"
Console.WriteLine(typeof(SubClass).GetCustomAttributes(true).First());
属性の継承はデフォルトで有効になっています。
この動作は次の方法で変更できます。
[AttributeUsage (Inherited = False)]