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

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)]


답변