.NET 리플렉션에서 BindingFlags.DeclaredOnly와 함께 GetProperties () 사용
내가 사용한다면
sometype.GetProperties();
유형에서 모든 속성을 가져오고 부모입니다. 그러나 부모가 아닌이 유형에 명시 적으로 정의 된 속성 만 검색하고 싶습니다. 나는 그것이 BindingFlags.DeclaredOnly
옵션 이라고 생각했습니다 .
그러나 이것을 시도하면 :
sometype.GetProperties(BindingFlags.DeclaredOnly);
0 개의 속성을 얻습니다.
아무도 내가 뭘 잘못하고 있는지 알아?
any를 지정하는 경우 BindingFlags
가져 오려는 속성을 명시 적으로 지정해야합니다. 예를 들면 :
sometype.GetProperties (BindingFlags.DeclaredOnly |
BindingFlags.Public |
BindingFlags.Instance);
요약:
GetProperties()
(매개 변수없이) 오버로드 를 사용하면 모든 공용 속성 을 얻을 수 있습니다 .반면에
GetProperties(BindingFlags)
오버로드 (BindingFlags
매개 변수 를 허용하는 것 )를 사용하는 경우 다음 플래그의 각 그룹에서 적어도 하나의 비트 OR을 지정해야합니다.BindingFlags.Instance
/BindingFlags.Static
(인스턴스 대 정적 속성),BindingFlags.Public
/BindingFlags.NonPublic
(공용 및 비공개 속성).
예를 들어 공개 정적 속성 GetProperties(BindingFlags.Public | BindingFlags.Static)
을 가져 오려면 결과를 얻기 위해 호출해야 합니다. 호출 만하 GetProperties(BindingFlags.Public)
거나 GetProperties(BindingFlags.Static)
결과를 반환하지 않습니다.
또한 지정 BindingFlags.Default
하면 빈 배열 이 반환 됩니다 .
자세한 내용은 GetProperties (BindingFlags)에 대한 MSDN 설명서 에서 찾을 수 있습니다 .
다음 BindingFlags 필터 플래그를 사용하여 검색에 포함 할 중첩 유형을 정의 할 수 있습니다.
- 반품을 받으려면
BindingFlags.Instance
또는 중 하나를 지정해야합니다BindingFlags.Static
.BindingFlags.Public
검색에 공용 속성을 포함하도록 지정 합니다.- 검색에
BindingFlags.NonPublic
비공개 방법 (즉, 개인, 내부 및 보호 방법)을 포함하도록 지정 합니다. 기본 클래스의 보호 및 내부 메서드 만 반환됩니다. 기본 클래스의 개인 메서드는 반환되지 않습니다.BindingFlags.FlattenHierarchy
계층 구조에 공용 및 보호 된 정적 멤버를 포함하도록 지정 하십시오. 상속 된 클래스의 개인 정적 멤버는 포함되지 않습니다.다음 BindingFlags 수정 자 플래그를 사용하여 검색 작동 방식을 변경할 수 있습니다.
BindingFlags.DeclaredOnly
단순히 상속 된 속성이 아닌 Type에 선언 된 속성 만 검색합니다.
BindingsFlag를 약간 확장해야합니다. 의미있는 것을 되찾기 위해 최소한 어떤 접근성 수준과 인스턴스 대 정적을 포함해야합니다.
실제로 찾고있는 것은 다음과 같습니다.
var flags = BindingFlags.DeclaredOnly
| BindingFlags.Instance
| BindingFlags.Public;
someType.GetProperties(flags);
보내는 사람 은 MSDN 사이트.
기본값 (멤버) 바인딩 플래그를 지정하지 않습니다.
Public 또는 NonPublic과 함께 Instance 또는 Static을 지정해야합니다. 그렇지 않으면 멤버가 반환되지 않습니다.
따라서 바인딩 플래그를 지정하지 않으면 아무것도 얻지 못합니다.
을 사용하는 데 문제가 있었는데 typeof(Thing)
결국 이것은 나를 위해 일했습니다.
var thisThing = (new Thing()).GetType();
foreach (var property in thisThing.GetProperties())
{
// ...
}
'Development Tip' 카테고리의 다른 글
_ : Swift에서 나에게 말하는 것은 무엇입니까? (0) | 2020.12.14 |
---|---|
두 Excel 워크 시트의 차이점을 찾으십니까? (0) | 2020.12.14 |
printf에서`% p`는 어디에 유용합니까? (0) | 2020.12.14 |
C # 숫자 열거 형 값 (문자열) (0) | 2020.12.14 |
Android : 버튼을 길게 클릭-> 작업 수행 (0) | 2020.12.14 |