2010-03-08 92 views

回答

3

目錄屬性是應用程序的默認,所以當你使用:

Application["temp"] = 8; 

引擎蓋下,上面的代碼將改爲調用Application.Contents["temp"] = 8

編輯:我剛剛使用了Reflector,並且Greg指出,Contents屬性只是返回當前的HttpApplicationState對象的引用。不確定我的答案在這種情況下是否嚴格正確 - 有人可以驗證這一點嗎?

編輯:好的,我發現當你打電話Application["temp"] = 8;Application.Contents["temp"] = 8;它實際上調用HttpApplicationState.Item。看看這個IL:

.method family hidebysig instance void Page_Load(object sender, class [mscorlib]System.EventArgs e) cil managed 
{ 
    .maxstack 8 
    L_0000: nop 
    L_0001: ldarg.0 
    L_0002: call instance class [System.Web]System.Web.HttpApplicationState [System.Web]System.Web.UI.Page::get_Application() 
    L_0007: ldstr "Key" 
    L_000c: ldc.i4.8 
    L_000d: box int32 
    L_0012: callvirt instance void [System.Web]System.Web.HttpApplicationState::set_Item(string, object) 
    L_0017: nop 
    L_0018: ldarg.0 
    L_0019: call instance class [System.Web]System.Web.HttpApplicationState [System.Web]System.Web.UI.Page::get_Application() 
    L_001e: callvirt instance class [System.Web]System.Web.HttpApplicationState [System.Web]System.Web.HttpApplicationState::get_Contents() 
    L_0023: ldstr "Key" 
    L_0028: ldc.i4.8 
    L_0029: box int32 
    L_002e: callvirt instance void [System.Web]System.Web.HttpApplicationState::set_Item(string, object) 
    L_0033: nop 
    L_0034: ret 
} 
+0

+1使用反射器 – iTayb 2010-03-08 17:29:52

4

「Contents」屬性的目的只是返回一個reference to the HttpApplicationState object

它只是返回this,所以你理論上可以做Application.Contents.Contents.Contents.Contents["temp"] = 8;,它會做同樣的事情。

只需使用Application["temp"] = 8;

+1

接下來的問題是「這有什麼用,真的嗎?」 – Greg 2010-03-08 17:29:41

+1

簡單的索引。我猜他們只是想讓它看起來和感覺就像Session一樣。 – womp 2010-03-08 17:37:22

相關問題