2013-06-29 45 views
-1

一直以來,我認爲構造函數的目的之一是在類中創建新的內部對象並設置它們的值。但是當我在Silverlight中嘗試創建控件(它是移動支付的控件)時,我在第三方程序集中得到了一個N​​ullReferenceException。當我將創建代碼移動到按鈕處理程序時,它工作正常。構造函數的含義

問題:這是特定的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

什麼是例外?什麼代碼引發異常?我們不能只是猜測。 – David

+1

它確實取決於您在構造函數中正在做什麼。使用Controls時,您的代碼可能會訪問尚未完全初始化的組件。通常有一些特殊事件在控件初始化時觸發。這不是Silverlight特有的。 – thmshd

回答

0

構造函數根據您的想法做了基本的初始化,這是標準的。但是不要將由於外部控制的設計而導致的失敗與構造函數的概要聯繫起來。看來這個控件依賴於目前還沒有確定大小的其他項目,並且可能由於高度和寬度返回nan值而失敗,原因可能是由於在主頁面中的初始構建期間未測量到這些值。

查看Silverlight Layout System瞭解更多爲什麼在初始建設期間橫幅失敗。

+0

謝謝。我不知道它是因爲我在Silverlight和UI中都是新手。如果我在頁面構建之後需要立即執行某些操作,我必須使用上面提到的特殊事件(如FrameworkElement.Loaded Event)? – Ghosthack

+0

@Ghosthack你將不得不嘗試,但它發生在我們所有人身上。加載事件聽起來很不錯。由於MainPage是整個系統的第一頁和導航到的頁面,因此它可能與其他頁面不一樣。但仍然繼續試驗。 – OmegaMan

相關問題