문제

다음 코드를 고려하십시오.

Object obj;
PropertyDescriptorCollection A = TypeDescriptor.GetProperties(obj);
PropertyInfo[] B = obj.GetType().GetProperties(); // EDIT*

나는 A와 B의 차이점을 이해하려고 노력하고 있습니다. typedescriptor.getProperties () 관습을 반환합니다 Typedescriptor 속성, 여기서 type.getProperties () 객체의 고유 "실제"속성 만 반환합니다. 이게 옳은 거니? OBJ에 관습이 없다면 Typedescriptor 속성은 단지 객체의 문자 그대로의 고유 속성을 반환하는 것만 기본값입니다.


* 원래의 편집하기 전에 두 번째 코드 줄 (잘못된 반환 값) :

PropertyDescriptorCollection B = obj.getType (). getProperTies ();

도움이 되었습니까?

해결책

obj.GetType().GetProperties() 반환하지 않습니다 PropertyDescriptorCollection, 반환 a System.Reflection.PropertyInfo[]. 그만큼 PropertyInfo 당신이 제안한 바와 같이, 클래스는 객체에서 생성 된 실제 속성 만 나타냅니다. ㅏ PropertyDescriptor 맞춤형 콘크리트 아이입니다 PropertyDescriptor 클래스 (사용자 정의 디스크립터 정의 유형에 의해 구현 됨) 또는 봉인 된 내부 클래스의 인스턴스입니다. ReflectPropertyDescriptor 그것을 사용합니다 PropertyInfo 속성의 동적 호출을 제공하는 클래스.

따라서 사용자 정의 설명자를 정의하지 않는 클래스의 경우 기능적으로 동일한 개체를 다시 얻을 수 있지만 PropertyDescriptor 추상화하고 있습니다 PropertyInfo.

다른 팁

그만큼 TypeDescriptor 클래스는 디자이너에서 사용되므로 설계 시간 환경과 상호 작용할 수 있습니다. 특히 디자이너는 다양한 기능을 무시하고 확장 할 수 있습니다. TypeDescriptor, 하지만 Type.

좋은 예는 데이터 바운드 컨트롤로 작업하는 것입니다. 그만큼 DataSource 속성은 유형입니다 System.Object, 그러나 설계 시간에 해당 속성은 더 풍부한 설계 시간 UI가있는 새로운 속성으로 대체됩니다.

그만큼 TypeDescriptor 클래스 반환 PropertyDescriptor 유형의 속성을 나타내는 객체 obj 물체 자체 또는 그 유형에 기여한 다른 속성뿐만 아니라.

구성 요소 모델은 실제로 상당히 복잡하지만 설명대로 기본 구현 TypeDescriptor.GetProperties() 돌아올 것입니다 ReflectPropertyDescriptor 전형적인 간접을 나타내는 사례 PropertyInfo 사물. 당신이 사용할 수있는 PropertyDescriptor 아주 좋아하는 물체 PropertyInfo 물체 : 속성의 가치를 얻고 설정하는 데 사용될 수 있으며 속성이 있습니다.

을 위한 DependencyObject WPF의 인스턴스, TypeDescriptor.GetProperties() 또한 첨부 된 속성을 반환합니다. 이것들 PropertyDescriptor 이 경우 객체는 반사보다는 종속성 객체 모델을 간접적으로 제공합니다.

구성 요소 디자이너에서는 사용할 수 있습니다. ICustomTypeDescriptor 또는 TypeDescriptionProviderAttribute (그리고 아마도 다른 기술) 당신 자신을 만들기위한 PropertyDescriptor 런타임 또는 DesignTime시 객체. 어쨌든 속성이 Type.GetProperties() 반환 된 것과는 매우 다를 수 있습니다 TypeDescriptor, 컨텍스트에 따라.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top