2016-06-09 5 views
0

유형의 보호되고 공개 된 속성 만 가져 오려고합니다. 이것은 내가 현재 C에서 반사를 통해 유형의 보호 및 공용 속성을 얻는 방법 #

var type = typeof(AClass); 
var propertyInfo = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) 

을하고 있어요하지만 난 개인 및 내부 속성 만 공공 및 보호 속성을 필터링 할 수 있습니다 것입니다.

이 작업을 수행하는 방법에 대한 제안 사항이 있으십니까?

+0

이 BindingFlags.Public''제거하십시오. – theB

+0

@theB 미안하지만 내 질문을 수정했습니다. 유형 및 내부 및 개인이 아닌 보호되고 공개 된 속성을 가져오고 싶습니다. – Anwuna

+0

답장을 게시 한 후 게시물을 수정하여 답을 수정하고 무효화하는 것보다는 먼저 무엇을 하려는지 분명히해야합니다. – Rahul

답변

6

속성에는 get 및 set 메서드가 포함되어 있으며 액세스 가능성이 다를 수 있습니다 (예 : public 및 other 중 하나를 보호 할 수 있음). 또한 getter 또는 setter가 누락 될 수 있습니다 (get-only 또는 set-only 속성). 너무 그것으로 잘 작동합니다 -

typeof(AClass).GetProperties(BindingFlags.Instance | BindingFlags.NonPublic) 
    .Where(c => c.GetMethod != null && c.GetMethod.IsFamily || c.SetMethod != null && c.SetMethod.IsFamily).ToArray(); 

는 또한 BindingFlags.Public을 제거했지만, 그 필요하지 않습니다 : 가져 오거나 설정할 방법이 보호되고,이 작업을 수행 할 수 있습니다 등록 정보를 얻으려면.

당신이 보호 및 공용 속성, 그냥 조금 수정 얻을하려면

:

typeof(AClass).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) 
    .Where(c => (c.GetMethod != null && (c.GetMethod.IsPublic || c.GetMethod.IsFamily)) || (c.SetMethod != null && (c.SetMethod.IsPublic || c.SetMethod.IsFamily))).ToArray(); 
-2

이 시도 ..

PropertyInfo[] props = someType.BaseType.GetProperties(
    BindingFlags.NonPublic | BindingFlags.Public 
    | BindingFlags.Instance | BindingFlags.Static) 
그것은 주어진 유형 someType의 (내부/보호/민간 + 공공 정적 + 예)에 대한 작동합니다

(어쩌면 GetType을()를 사용 someType를 얻을 수)

1

은 보호하려면 :

 var type = typeof(T); 

     var properties = type.GetProperties(BindingFlags.NonPublic); 

     var protectedOnly = properties.Where(info => info.GetMethod.IsFamily); 
+0

당신의 해결책은 올바른 길로 나를 잡았습니다. 그래서 나는 그것을 표결합니다. 원래 혼란에 대한 사과. 다시 한번 감사드립니다. – Anwuna

+0

문제 없으니 기꺼이 도와주세요. –

관련 문제