2011-08-25 7 views
3

저는 추상 클래스가 있습니다. Base으로 이름을 짓겠습니다. 이 클래스에는 몇 가지 속성이 포함되어 있습니다. 또한, 클래스 Base에서 상속 된 또 다른 클래스가 있습니다 - Child으로 이름을 짓겠습니다. Child은 추상적이지 않습니다.리플렉션을 사용하여 추상 클래스의 속성에 액세스합니다.

내가 리플렉션 클래스 Base에서 속성에 액세스 할 및 이러한 속성은 Base에 선언했다. 내가

Base base = new Base(); 
Type type = base.GetType(); 
PropertyInfo[] propInfos = 
    type.GetProperties(
     BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly 
    ); 

다음 코드이 가능 추상 클래스의 인스턴스를 만들 수 없기 때문에

다음 코드는 물론 불가능하지만 나는 모든 속성, 그뿐만 아니라 Base에 정의 수 Child에 정의 된대로.

Child child = new Child(); 
Type type = child.GetType(); 
PropertyInfo[] propInfos = 
    type.GetProperties(BindingFlags.Instance | BindingFlags.Public); 

어떻게 반사를 통해 클래스 Base의 모든 속성을 얻을 수 있나요?

답변

2

개체에 GetType()을 호출하면 Type 개체를 가져 오는 방법 중 하나 일뿐입니다. abstract 클래스에 대해서도 작동하는 다른 클래스는 typeof()입니다. typeof(A).GetProperties과 함께 BindingFlags.DeclaredOnly 옵션을 사용하면 트릭을 수행해야합니다.

+0

추가 질문이 'propInfo.SetValue이 (???, 값, null)와'난 단지 유형을 가지고 있기 때문에, 어떤 객체, 어떻게 설정할 수 있습니다 /이 얻을 값? – Em1

+0

@ Em1 잘 모르겠습니다. 객체가 없으면 속성을 설정하거나 속성 값을 가져 오는 중 무엇입니까? – AakashM

+0

그냥 알고 싶다 : 내가 추상적 인 클래스의 한 속성을 가지고 있다면, 나는이 속성의 setter/getter를 올릴 수 있을까? (당연히 내가 반드시 abstract 메서드로 넘어 가지 않을 것인가, 아니면 이것이 이유인가? 왜 그럴 수 없습니까?) – Em1

3

이 시도 :

Type type = typeof(A); 

PropertyInfo[] propInfos 
    = type.GetProperties(BindingFlags.Instance 
     | BindingFlags.Public 
     | BindingFlags.DeclaredOnly); 
관련 문제