2009-08-06 13 views
82

属性のboolプロパティーは何を指していますか?Inherited継承はどのように属性に対して機能しますか?

属性がAbcAtribute(つまりInherited = true)のクラスを定義し、そのクラスから別のクラスを継承すると、派生クラスにも同じ属性が適用されますか?コード例でこの質問を明確にするために

、次のことを想像:

[AttributeUsage(AttributeTargets.Class, Inherited = true)] 
public class Random: Attribute 
{ /* attribute logic here */ } 

[Random] 
class Mother 
{ } 

class Child : Mother 
{ } 

ChildRandom属性がそれに適用されていますか?

+0

それはあなたが質問をしたときにそうではありませんでしたが、今日[ 'Inherited'財産の公式ドキュメント](https://msdn.microsoft.com/en-us/library/system.attributeusageattribute.inherited。 aspx)には、継承されたクラスと 'override'メソッドの両方について、' Inherited = true'と 'Inherited = false'の違いを示す精巧な例があります。 –

答えて

88

それはあなたが作成している属性は、属性によって装飾されたクラスのサブクラスによって継承できることを意味します(デフォルト)=真継承されています。だから、

- あなたは[AttributeUsage(=真の継承)]と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のE ...その後

MySubClass MySubClassInstance = new MySubClass(); 

それが属性を持っているかどうかをテスト...

MySubClassInstance <は---今SpecialName値として "ボブ" とMyUberAttributeを持っています。

+12

属性の継承は、デフォルトで有効になっています。 –

12

はい、それはそれが何を意味するのかを正確です。 Attribute

[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()); 
関連する問題