簡而言之,你不能那樣做。
您會發現,「MasterType」目錄提供了類型的信息,編譯器在編譯時使用該信息。
當你喜歡寫東西Page.MasterPage.btn1.Text = "abcd"
,那麼編譯器需要知道如何處理「BTN1」的一部分。它是什麼?它是一個領域?屬性?一個方法?嵌套類?或者它可能根本不存在?
要回答這些問題,編譯器需要知道Page.MasterPage
表達式的類型。這正是您提供的「MasterType」指令。
的VirtualPath屬性基本上說「先走編譯其他的文件,其編譯的結果將是這個頁面的主屬性的類型」。這就是編譯器知道的。
從上面所有內容,可以得出一個結論:不僅無法在運行時更改某些屬性的類型,它也沒有任何意義 - 中的代碼已經被編譯,你不需要任何編譯時信息了!
所以出現的下一個問題是:爲什麼你想要做到這一點?
如果您只是想使用在不同母版頁中聲明的不同屬性,那麼您可以採用Nick Craver和Nathan Taylor的建議,並聲明一個基類,該基類將具有所有這些字段/屬性並且繼承所有母版頁從該基類繼承,然後讓您的MasterType指令通過TypeName屬性指定該基類。
但是,我只會走這條路如果這兩個母版頁在邏輯上相似,只是在設計上有所不同。也就是說,一個頁面不應該具有其他屬性。否則,它只是不正確的具有屬性/方法/字段的兩個子集在一類(這將是基類)時只有那些子集中的一個在任何時候被使用。如果在那裏沒有真正的共同基地,那麼爲兩個班級建立一個共同的基礎是不對的。又名「壞設計」。在這種情況下,您應該重新考慮您的初始設計。
如果你的目的是一些其他的 - 請解釋一下,我會盡量拿出一些對你的解決方案。
祝你好運。
Althoght你給了一個很好的答案是不是解決辦法。但由於它對於更多訪問者非常有用,我將把它標記爲Userfull。 :) – Marco 2010-02-26 20:59:04
這不是一個解決方案,因爲沒有。 :-)在我的回答中,我試圖仔細解釋原因。 – 2010-02-27 13:04:09