상속 된 클래스가 아닌 클래스의 리플렉션 속성을 가져옵니다.


80
class Parent {
   public string A { get; set; }
}

class Child : Parent {
   public string B { get; set; }
}

속성 A없이 속성 B 만 가져와야하지만

Child.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)

두 속성 모두 반환 : /

답변:


155

다음과 같이 플래그 에 BindingFlags.DeclaredOnly 를 추가해야합니다 .

typeof(Child).GetProperties(System.Reflection.BindingFlags.Public
    | System.Reflection.BindingFlags.Instance
    | System.Reflection.BindingFlags.DeclaredOnly)

2
이것은 다른 방법으로 할 수 있습니다. Parent.GetProperties () 및 특정 개체가 자식에 의해 상속 된 경우 부모 및 자식에서 모든 속성을 가져옵니다
Maiko Kingma

10

DeclaredOnly 바인딩 플래그를 사용해보십시오. 반환되는 속성을 관심있는 클래스에서 선언 된 속성으로 만 제한해야합니다. 다음은 코드 샘플입니다.

PropertyInfo[] properties = typeof(Child).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly);


4

에서 Type.cs :이 경우 DeclaredOnlyLookup를 사용

  private const BindingFlags DefaultLookup = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public;
  internal const BindingFlags DeclaredOnlyLookup = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly;

1
흥미롭게도이 접근 방식을 사용하고 내 자신의 const BindingFlags를 정의 할 것입니다. 소스 코드를 조사하려면 +1하십시오.
C. Tewalt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.