programing

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

closeapi 2023. 5. 21. 11:30
반응형

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

무엇을 합니까?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(상속됨 = 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 <--- 이제 "Bob"이 SpecialName 값으로 지정된 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)]

언급URL : https://stackoverflow.com/questions/1240960/how-does-inheritance-work-for-attributes

반응형