.Net WPF 종속성 속성이 클래스의 정적 멤버여야 하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/36682

  •  09-06-2019
  •  | 
  •  

문제

요즘 WPF를 배우고 있습니다.오늘 .Net 종속성 속성으로 새로운 것을 발견했습니다.그들이 테이블에 가져오는 것은

  • 콜백 지원(검증, 변경 등)
  • 재산 상속
  • 연결된 속성

그중에서도.

하지만 여기서 내 질문은 왜 포함 클래스에서 정적으로 선언해야 합니까?권장되는 방법은 인스턴스 '래퍼' 속성을 추가하는 것입니다.왜 ?

편집하다:@Matt, 하지만 속성 값이 인스턴스 간에 공유되어야 한다는 것도 요구하지 않습니까? 물론 파생된 값이 아닌 한?

도움이 되었습니까?

해결책

그 요구 사항 뒤에는 두 가지 이유가 있습니다.

  1. 동일한 DP를 두 번 등록할 수 없습니다.이 제약 조건을 준수하려면 정적 변수를 사용해야 합니다. 정적 변수는 한 번만 초기화되므로 DP를 한 번만 등록하면 됩니다.
  2. DP는 해당 DB를 사용하는 클래스 인스턴스가 생성되기 전에 등록되어야 합니다.

다른 팁

WPF의 주요 최적화로 인해 종속성 속성은 정적입니다.WPF의 많은 컨트롤에는 수백 개는 아니더라도 수십 개의 속성이 있습니다.이러한 클래스의 속성 대부분은 기본값으로 설정됩니다.DP가 인스턴스 속성인 경우 생성하는 모든 개체의 모든 속성에 대해 메모리를 할당해야 합니다.DP는 정적이므로 WPF는 각 속성의 메모리 사용량을 보다 효과적으로 관리할 수 있습니다.

등록하는 DP에 대해 기본값을 제공해야 하는 이유는 해당 속성을 포함하는 개체 수에 관계없이 속성이 기본값으로 설정될 때 WPF가 해당 속성에 추가 메모리를 할당하지 않도록 주의하기 때문입니다.

종속성 속성의 정적 인스턴스가 필요한 이유는 실제로 그것이 설계된 방식 때문이라고 생각합니다.정적 비트는 기본값, 소유자 유형(연결된 속성인 경우 편리함) 등 모든 속성 메타데이터, 변경 시에 대한 콜백 메서드 등을 보유합니다.인스턴스별로 저장하는 것이 아니라 클래스의 모든 인스턴스에 걸쳐 이러한 항목을 정적으로 저장하는 것이 합리적입니다.

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