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