속성에 대한 상속은 어떻게 작동합니까?


108

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적용된 속성을?


3
당신이 질문을 할 때 그것은 사실이 아니다, 그러나 오늘날 의 공식 문서 Inherited속성은 정교한 예제가 보여 그 사이의 차이 Inherited=trueInherited=false상속 클래스와 모두를위한 override방법.
Jeppe Stig Nielsen

답변:


117

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가 있습니다.


21
속성 상속은 기본적으로 활성화되어 있습니다.
Corstian Boerman 2015-08-27

14

예, 그것이 의미하는 바입니다. 속성

[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());

2

속성 상속은 기본적으로 활성화됩니다.

다음과 같이이 동작을 변경할 수 있습니다.

[AttributeUsage (Inherited = False)]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.