Application["temp"] = 8;
應將值8
設置爲密鑰temp
。Application [「Key」]和Application.Contents [「Key」]之間的區別是什麼?
然而,這樣做Application.Contents["temp"] = 8;
那麼什麼是這兩者之間的區別是什麼?
非常感謝。
Application["temp"] = 8;
應將值8
設置爲密鑰temp
。Application [「Key」]和Application.Contents [「Key」]之間的區別是什麼?
然而,這樣做Application.Contents["temp"] = 8;
那麼什麼是這兩者之間的區別是什麼?
非常感謝。
目錄屬性是應用程序的默認,所以當你使用:
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
}
「Contents」屬性的目的只是返回一個reference to the HttpApplicationState object。
它只是返回this
,所以你理論上可以做Application.Contents.Contents.Contents.Contents["temp"] = 8;
,它會做同樣的事情。
只需使用Application["temp"] = 8;
。
+1使用反射器 – iTayb 2010-03-08 17:29:52