2013-06-29 2 views
-1

전적으로 생성자의 목적 중 하나는 클래스에서 새 내부 객체를 만들고 그 값을 설정하는 것이라고 생각했습니다. 그러나 Silverlight에서 MainPage 생성자에서 컨트롤 (모바일 결제를위한 컨트롤)을 만들려고했는데 타사 어셈블리에서 NullReferenceException이 발생했습니다. 생성 코드를 버튼 핸들러로 옮길 때 잘 동작했습니다.생성자의 의미

질문 :이 특정 Silverlight 동작입니까 또는 생성자의 임무가 올바르지 않습니까?

// Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 

     //Exception 
     Banner Banner = new GeneralBanner (ContentPanel); 
    } 

    // Banner 
    public GeneralBanner (Grid contentPanel) 
    { 
     AdBanner = new InneractiveAd (AppId, InneractiveAd.IaAdType.IaAdType_Interstitial, 
      ContentPanel, 30, Options); 
    } 
+0

여기에 코드를 입력하십시오. –

+3

예외는 무엇입니까? 어떤 코드가 예외를 throw합니까? 우리는 추측 할 수 없습니다. – David

+1

정말 생성자 안에서 정확히 무엇을하는지에 따라 다릅니다. 컨트롤로 작업 할 때 코드는 아직 완전히 초기화되지 않은 구성 요소에 액세스 할 수 있습니다. 일반적으로 컨트롤이 초기화 될 때 트리거되는 특별한 이벤트가 있습니다. 이것은 Silverlight에만 국한되지 않습니다. – thmshd

답변

0

생성자는 생각에 따라 기본 초기화를 수행하며 이는 표준입니다. 그러나 생성자의 개요와 함께 외부 제어 설계로 인해이 실패를 연관시키지 마십시오. 이 컨트롤은 현재 크기가 조정되지 않은 다른 항목에 의존하며 높이와 너비가 인 값으로 인해 기본 페이지에서 초기 구성시 측정되지 않았기 때문에 실패한 것으로 보입니다.

Silverlight Layout System을 참조하십시오. 처음 공사 도중 배너가 왜 실패하는지 자세히 알아보십시오.

+0

감사합니다. 내가 실버 라이트와 UI에서 초보자이기 때문에 나는 그것을 몰랐다. 페이지 생성 후 즉시 처리해야 할 경우 (FrameworkElement.Loaded 이벤트와 같이) 위에 주목 한 특별 이벤트를 사용해야합니다. – Ghosthack

+0

@Ghosthack 실험을해야하지만, 우리 모두에게 일어납니다. 로드 된 이벤트는 좋은 소리입니다. MainPage는 전체 시스템의 첫 번째 페이지와 탐색 된 페이지이므로 다른 사람들과 동일하게 재생되지 않을 수 있습니다. 그러나 다시 실험을 계속한다. – OmegaMan